7

10000 を超えるノード (増加する可能性があります) から数分ごとに生成されるテレメトリ データを保存する必要があり、それぞれがインターネット経由でサーバーにログ記録用のデータを提供します。また、Web アプリケーションからこのデータをクエリする必要があります。

最適なストレージ ソリューションを決定するのに少し苦労しています。

各ノードには一意の ID があり、変数の各パケットにはタイムスタンプがあります。(おそらく、サーバーによって生成される必要があります)。

テレメトリ データにはすべての変数が同じパケットに含まれているため、概念的には、変数ごとに列を持つ 1 つのデータベース テーブルに簡単に格納できます。シリアル番号 + タイムスタンプがキーとして十分です。各テレメトリ パケットのサイズは、デバイス ID とタイムスタンプを含めて 64 バイトです。つまり、年間約 100Gb+ です。

データをクエリして時間範囲全体の変数を取得し、このデータの集計レポートを保存してグラフを描画できるようにしたいと考えています。

さて、これをどのように処理するのが最善でしょうか?私は MySQL の使用にかなり慣れているので、これに傾倒しています。MySQL を使用する場合、デバイス ID ごとに個別のテーブルを用意することは理にかなっていますか? - これによりクエリがはるかに高速になりますか、それとも数万のテーブルが問題になるでしょうか?

一度にすべてのデバイスから変数を照会する必要はないと思いますが、必要になる可能性があります。または、すべてを単一のテーブルに貼り付けて、MySQL クラスターが非常に大きくなった場合に使用する必要がありますか?

または、より良い解決策はありますか?私はいくつかの非リレーショナル データベースを見回してきましたが、法案に完全に適合するものや非常に成熟しているように見えるものは見当たりません。たとえば、MongoDB は行ごとにかなりのサイズのオーバーヘッドがあり、MySQL と比較して、単一の変数の値を広い時間範囲でクエリする際にどれほど効率的かはわかりません。また、MySQL はしばらく前から存在しており、堅牢です。

また、データの複製とバックアップを簡単に行えるようにしたいと考えています。

任意のアイデア、または誰かが同様のことを行っている場合は、入力していただければ幸いです。

4

2 に答える 2

5

時系列データベースを見たことがありますか?それらはあなたが説明しているユースケース向けに設計されており、組み込みのデータの折りたたみと圧縮により、実際にはスペース要件の点でより効率的になる可能性があります。

実証済みの非同期レプリケーション機能とスループットが得られるため、Raw ストレージに HBase または Cassandra を使用した実装を検討することをお勧めします。

HBase 時系列データベース:

于 2015-07-28T18:07:39.273 に答える
2

MySQL を使用したい場合は、最新のハードウェアで年間 100 GB のようなものを簡単に投入しても継続しますが、後で (ライブ システムで) スキーマの変更を実行できないことに注意してください。 . これは、最初に適切で完全なデータベース スキーマが必要であることを意味します。

このテレメトリ データがさらに機能を拡大するかどうかはわかりませんが、拡大する場合、列またはインデックスを追加する必要がある場合に、データベースを何時間もロックする必要はありません。

ただし、http://www.percona.com/doc/percona-toolkit/pt-online-schema-change.htmlなどの一部のツールを使用すると、このような変更を多少簡単に行うことができます。InnoDB を使用している限り、パフォーマンスの問題は発生しません。

もう 1 つのオプションは、オンラインでスキーマを変更できる PostgreSQL を使用することです。これは、インデックスの使用に関していくらか賢明な場合もあります。(たとえば、http://kb.askmonty.org/en/index-condition-pushdownは MySQL/MariaDB の新しいトリックであり、クエリ時に 2 つのインデックスを組み合わせることができます。PostgreSQL はこれを長い間行ってきました。 .)

オーバーヘッドについて: 64 バイトのテレメトリ データをアンパック形式で保存するため、レコードはディスク上で 64 バイト以上を占めることになります。あらゆる種類の構造化ストレージがこれに悩まされます。

SQL ソリューションを使用する場合、バックアップは簡単です。データをダンプするだけで、後で復元できます。

于 2012-05-09T22:29:53.650 に答える