1

MemSQL 内に多数のデータベースを作成することの影響に関するガイダンスを探しています。

私のユースケースでは、アプリケーション内の各ユーザーが n テーブルにアクセスできる必要があります。1 つのオプションは、ユーザーごとに DB を作成することです (これにより、テーブルなどの一覧表示が "SHOW TABLES" で簡単になり、管理とセキュリティのための優れた抽象化レイヤーでもあります)。オプション 2 は、すべてのユーザーとテーブルを含む単一の DB を持つことですが、制御ロジックが複雑になります。

質問:

単一の DB ではなく、多数の DB アプローチを使用することのパフォーマンスへの影響 (ある場合) は何ですか?

ガイダンスに感謝します。

4

1 に答える 1

3

memsql の各データベースには独自のトランザクション バッファがあり、サイズは のtransaction-buffer変数で設定されますmemsql.cnf。シングル ボックスの場合、デフォルト サイズは 128m です。つまり、新しいデータベースごとに、追加で 128 メガバイトの RAM が消費されます。これにより、作成できるデータベースの数に厳しい制限が課せられます。RAM の量です。

分散型 memsql では、アグリゲーターとリーフ ノードの両方がデフォルトでデータベースごとに 64m を使用します。ただし、リーフにはパーティションごとに 1 つのデータベースがあり、通常、各リーフには CPU コアごとに 1 つのパーティションがあります。これは、memsql クラスターで作成された各データベースが、各リーフでデフォルトで CORES * 64m を使用することを意味します。たとえば、8 コア リーフ ノードのデータベースあたり 512m です。

膨大な数のデータベースを作成する場合は、トランザクション バッファーのサイズを小さくする必要があります。そのバッファは書き込みに使用されるため、書き込みワークロードが高度に同時実行されるか、巨大なトランザクションを作成しない限り、デフォルト値を下げても安全です。

あなたのユースケースでは、特定の時点でユーザーのごく一部のみがデータベースに書き込みを行うと予想される場合、それぞれが独自のデータベースを持っている場合、そのトランザクションバッファースペースの多くはアイドル状態になります。すべてのユーザーを 1 つのデータベースに配置すると、トランザクション バッファーを共有できるため、無駄なメモリが削減されます。

于 2016-03-10T00:58:37.763 に答える