1

このタスクは、完成した研究プロジェクトから大量のログファイル (約 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 つのノードで何とか可能ですか?

4

1 に答える 1

0

高性能の分析が必要だとあなたが言ったように、個人的にはより高速なソリューションを好むでしょう。問題は、そのためにまったく新しいシステムをセットアップする必要があり、必要な追加の労力に比べてパフォーマンスの向上がわずかである場合は、SQL を使用し続けることです。

私たちの会社では、VM 上のデータが 0.5 GB にも満たない非常に小さなデータベースを使用しています。現在の問題は、VM を使用するとすぐに、大きなパフォーマンスの問題が発生することです。VM でデータベースを開くと、その間にコーヒーを飲みに行くことができます;)

ただし、データベースがキャッシュにロードされるまでの時間がそれほど重要でない場合は、問題ありません。それはすべて、新しいシステムがどれだけ速くなると思うか、それにどれだけの労力を費やす必要があるかによって異なりますが、前述のように、「高性能分析」を行う必要がある場合は、より高速なソリューションを好むでしょう

于 2013-01-09T09:05:54.773 に答える