このタスクは、完成した研究プロジェクトから大量のログファイル (約 8 TB) をフィルタリングして分析することです。アイデアは、データベースにデータを入力して、後でさまざまな分析タスクを実行できるようにすることです。
値はカンマ区切りで保存されます。原則として、値は最大 5 つの値のタプルです。
id, timestamp, type, v1, v2, v3, v4, v5
MySQL を使用する最初の試みでは、行ごとに 1 つのログ エントリを持つ 1 つのテーブルを使用しました。したがって、ログ値の間に直接的な関係はありません。ここでの欠点は、サブセットのクエリが遅いことです。
関係がないため、NoSQL データベースなどの代替手段を調べたところ、hbase や cassandra などの列ベースのテーブルがこの種のデータに最適であると思われました。しかし、これらのシステムは、私たちが持っていない巨大な分散システム用に作られています。この場合、分析は単一のマシンまたはおそらくいくつかの VM で実行されます。
このタスクに適したデータベースはどれですか? hadoop+hbase を使用して単一のマシン インスタンスをセットアップする価値はありますか?
高パフォーマンスのログファイル分析を行うためにどのデータベースを選択しますか?
編集:クラウド サービスや新しいハードウェアにお金を使うことができないということは、私の質問から外れているかもしれません。問題は、mySQL の代わりに noSQL アプローチを使用する利点があるかどうかです (特にこのデータの場合)。何もない場合、または非常に小さいため、noSQL システムをセットアップする労力に見合わない場合は、ESXi インフラストラクチャと MySQL を使用できます。
EDIT2:私はまだここで問題を抱えています。MySQL でさらに実験を行い、利用可能なすべてのデータの 4 分の 1 を挿入しました。挿入は現在 2 日以上実行されており、まだ完了していません。現在、私の単一テーブル db には 2,147,483,647 行あります。インデックスを使用すると、211,2 GiB のディスク容量が必要になります。そして、これはすべてのログ データのわずか 4 分の 1 です...次の形式のクエリ
SELECT * FROM `table` WHERE `timestamp`>=1342105200000 AND `timestamp`<=1342126800000 AND `logid`=123456 AND `unit`="UNIT40";
完了するまでに 761 秒かかり、この場合は 1 行が返されます。タイムスタンプ、ログ ID、ユニットを組み合わせたインデックスがあります。
分析の後半で、時間範囲内のすべてのエントリを取得し、データポイントを比較する必要があるため、これは進むべき道ではないと思います。
私はMongoDBとRedisについて読みましたが、それらの問題は、それらがメモリデータベースにあるということです。
後の分析プロセスでは、非常に少量の同時データベース アクセスが発生します。実際、分析は 1 台のマシンから実行されます。冗長性は必要ありません。障害が発生した場合は、データベースを再生成できます。データベースが完全に書き込まれると、さらに行を更新または追加する必要もありません。
Redis、MongoDB などの代替手段についてどう思いますか。これを正しく行うと、データの次元で RAM が必要になります...このタスクは、単一ノード システムまたは 2 つのノードで何とか可能ですか?