質問

私は多くのテキストファイルを持っています、その合計サイズは約300GB〜400GBです。それらはすべてこの形式です

key1 value_a
key1 value_b
key1 value_c
key2 value_d
key3 value_e
....

各行は、キーと値で構成されています。キーのすべての値を照会できるデータベースを作成したいと思います。たとえば、key1、value_a、value_b、およびvalue_cをクエリすると、返されます。

まず、これらすべてのファイルをデータベースに挿入することは大きな問題です。ロードデータインフィル構文を使用して、MySQL MyisamテーブルにいくつかのGBSサイズチャンクを挿入しようとします。しかし、MySQLはデータを挿入するためにマルチコアを利用できないようです。地獄と同じくらい遅いです。ですから、MySQLはここで多くのレコードにとって良い選択ではないと思います。

また、定期的に、毎週、または可能であれば毎日データベースを更新または再作成する必要があります。したがって、挿入速度が重要です。

単一のノードがコンピューティングと挿入を効率的に行うことは不可能であり、効率的であるため、さまざまなノードで挿入を並外して実行する方が良いと思います。

例えば、

node1 -> compute and store 0-99999.txt
node2 -> compute and store 10000-199999.txt
node3 -> compute and store 20000-299999.txt
....

したがって、ここに最初の基準があります。

基準1.分散バッチ方法での高速挿入速度。

次に、テキストファイルの例でわかるように、異なる値に複数の同じキーを提供することをお勧めします。例のkey1は、value_a/value_b/value_cにマップします。

基準2.複数のキーが許可されています

次に、データベースのキーをクエリする必要があります。リレーショナルまたは複雑な結合クエリは必要ありません。必要なのは、単純なキー/値クエリだけです。重要な部分は、同じ値に対するその複数のキーです

基準3.シンプルで高速なキー値クエリ。

HBase/Cassandra/Mongodb/Redisなどがあることは知っていますが、などですが、私はそれらすべてに精通しておらず、どちらが私のニーズに合っているのかわかりません。それで、質問は - どのデータベースを使用するのですか?それらのどれも私のニーズに合っていない場合、私は自分のニーズを構築することさえ計画していますが、それは努力が必要です:/

ありがとう。

役に立ちましたか?

解決

私は同様の状況にあり、あなたのニーズのためにMongodbまたはHbaseを調べることを強くお勧めします。その他(Cassandra/Redis)も優れていますが、HbaseとMongodbは大きな環境で戦闘テストされており、大きなコミュニティ、優れた文書(Mongodbの方が優れています)があり、一般的にあなたが探している3つの要件を満たしています。

他のヒント

  • キーの大きさはどれくらいですか?
  • 値の大きさはどれくらいですか?
  • データは「継続的に」到着しますか、それともこれは1回限りの負荷ですか?
  • すべての代表的なクエリを見てみましょう。あなたは言及しました

SELECT val FROM tbl WHERE key = 'constant';

他にはありますか?

一般に、キーと価値のある店は大きな時間を吸います。しかし、たぶん私たちはあなたの特別なケースをそれほどbadいではないようにすることができます。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top