3

バックエンドの組み込みデータベース ライブラリとしてlevelDBを使用する分散キー値システム (またはデータ ストア) に取り組んでいます。

1 つのノード/マシンで複数のテーブルをホストしたい (レプリケーションと負荷分散の目的で)。levelDB にはテーブルの概念がないことを理解しているため、データをテーブルの形式で論理的に分割することはできません (したがって、これらのテーブルを分散の基本単位として使用することはできません)。

私の質問は: levelDB の単一インスタンスに複数の「論理テーブル」を持つ規定はありますか?

私の知る限り、ノード上で複数の levelDB インスタンスを実行して、それぞれが 1 つのテーブルを処理することができます。ただし、この場合、これらの複数の DB インスタンスに同時にアクセスすると、(ディスクで) 深刻な競合が発生するため、そうしたくありません。DB の単一インスタンスに複数の論理テーブルがあると、ディスク アクセスを最小限に抑えるための levelDB 最適化の利点が得られます。

4

2 に答える 2

9

LevelDB に複数の「論理テーブル」が必要な場合は、キー スペースを分割するか、キーにプレフィックスを追加する必要があります。テーブルごとに異なるプレフィックスを作成します。たとえば、次のようになります。

0x0001 is for table 1
0x0002 is for table 2
0x0003 is for table 3
and so on...

したがって、キーはテーブル プレフィックスとキー自体で構成されます。 [0x0001,0xFF11] は、テーブル 1 のキー 0xFF11 をアドレス指定します。その後、単一の LevelDB インスタンスを使用して、「テーブル」に対応する複数の「キー スペース」を持つことができます。

于 2012-09-19T22:30:15.280 に答える
2

Lirik が提案するように、キープレフィックスを使用してキースペースを分割するのが最善の方法です。複数のデータベースを開くことは可能ですが、データベースはバッファーとキャッシュを共有しないため、ユースケースにはお勧めしません。複数のオープン データベースを操作すると、パフォーマンスに悪影響を与える可能性があり、リソース (主にメモリ) の使用を最適化することが非常に難しくなります。

于 2012-11-07T07:52:52.340 に答える