多くのテキスト ファイルがあり、それらの合計サイズは約 300GB ~ 400GB です。それらはすべてこの形式です
key1 value_a
key1 value_b
key1 value_c
key2 value_d
key3 value_e
....
各行はキーと値で構成されています。キーのすべての値を照会できるデータベースを作成したいと考えています。たとえば、key1 をクエリすると、value_a、value_b、および value_c が返されます。
まず第一に、これらすべてのファイルをデータベースに挿入することは大きな問題です。LOAD DATA INFILE 構文を使用して、数 GB のサイズのチャンクを MySQL MyISAM テーブルに挿入しようとしています。しかし、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 などがあることは知っていますが、それらすべてに精通しているわけではなく、どれが自分のニーズに合っているかわかりません。問題は、どのデータベースを使用するかということです。どれも私のニーズに合わない場合は、自分で作成することさえ計画していますが、それには努力が必要です:/
ありがとう。