ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js Sequelize がデータベースの読み取りと書き込みの分離を実装する方法

Node.js Sequelize がデータベースの読み取りと書き込みの分離を実装する方法

高洛峰
高洛峰オリジナル
2016-12-09 13:07:012007ブラウズ

1. はじめに

同時実行性の高い Web アプリケーションを構築する場合、アプリケーション層で負荷分散ソリューションを採用することに加えて、データベースも高可用性と高同時実行性をサポートする必要があります。最も一般的に使用されるデータベース最適化ソリューションは、マスター/スレーブ レプリケーションを通じてデータを同期し、読み取りと書き込みの分離 (MySQL-Proxy) を通じてデータベースの同時負荷容量を向上させることです。

1. レプリケーションオプションと読み取りと書き込みの分離

Sequelize は読み取り/書き込みの分離をサポートしており、読み取りと書き込みのそれぞれに Sequelize インスタンスを作成するのがより便利です。インスタンスを作成するには、レプリケーション オプションを使用して読み取り/書き込みデータベースを個別に指定します。

Sequelize で読み取り/書き込みレプリケーションを使用するには、Sequelize の初期化時にオブジェクトをそのレプリケーション オプションに渡すことができます。このオブジェクトには読み取りと書き込みの 2 つのプロパティがあります。 write は単一のオブジェクト (つまり、書き込みは単一のサーバーによって処理されます) ですが、read はオブジェクトを含む配列です (つまり、読み取りは複数のサーバーによって処理されます)。各読み取りおよび書き込みサーバーには次の属性を含めることができます:

· host - データベース サーバーのホスト

· port - データベース サーバーのホスト ポート

· username - 検証ユーザー名

· パスワード - 検証パスワード

· データベース - 接続するデータベース

2. Sequelize 読み取り/書き込み分離の例

マスター/スレーブ レプリケーションを使用する複数のデータベース クラスターでは、レプリケーション オブジェクトの読み取り属性に設定できます。サーバー接続の 1 つ以上のコピーを渡すことができる配列。読み取り操作は、すべての SELECT クエリ操作 (読み取り操作) を処理する、データベース クラスター内のスレーブ ノードでの操作と同等です。レプリケーション オブジェクトの書き込み属性は、サーバー接続を表すオブジェクトであり、書き込み操作はすべての挿入、更新、および削除操作 (書き込み操作) を処理します。

var sequelize = new Sequelize('database', null, null, {
 dialect: 'mysql',
 port: 3306
 replication: {
  read: [
   { host: '192.168.1.33', username: 'itbilu.com', password: 'pwd' },
   { host: 'localhost', username: 'root', password: null }
  ],
  write: { host: 'localhost', username: 'root', password: null }
 },
 pool: { // 如果需要重写链接池,请在 pool 选项中修改
  maxConnections: 20,
  maxIdleTime: 30000
 },
})

すべてのグローバル設定はすべてのノードのコピーに適用されるため、インスタンスごとに個別に指定する必要はありません。上記の例では、データベース名とポート番号がすべてのノード レプリカに適用され、ユーザー名とパスワードのオプションも同様に適用されます。ノード レプリカがグローバル設定を使用しない場合は、レプリケーション オプションで個別に指定する必要があります。

注: Sequelize はマスター/スレーブ レプリケーション ノードとノード間のデータ同期 (レプリケーション) をセットアップしません。これらの操作は実際には MySQL (または使用するデータベース) によって完了します。 Sequelize は、マスター ノードとスレーブ ノードからのデータの書き込みまたは読み取りのみを担当します。

Sequelize は接続プールを使用してノードのコピーを管理します。

デフォルトのオプションは次のとおりです:

{
 maxConnections: 10,
 minConnections: 0,
 maxIdleTime:1000
}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。