4

状況は次のとおりです。

私は何十万ものセンサーを持っています(100,000としましょう)。各センサーは、規則的または不規則なタイミングの値を の形式で生成し(timestamp, value)ます。ステップ幅は 1 秒未満の場合があるため、1 年の間に(timestamp, value)特定のセンサーに対して数百万のペアが存在し、センサーごとに時系列が形成される可能性があります。(from, to)ユーザは、そのような時系列のセンサーの期間の値を要求する場合があります。

すべての値を 1 つのテーブルに格納すると ( sensor_id, timestamp, value)1 か月あたり文字通り数十億の値/行でテーブルがいっぱいになります。これは従来のオープンソース データベース システム (MySQL、PostgreSQL) を圧倒します)。

センサーの時系列ごとにテーブルを作成(timestamp, value)し、センサー テーブルでそれを参照することを考えています(sensor_id, sensor_name, sensor_table_name)。したがって、それぞれ数百万行のテーブルが 100,000 個あります。

センサーの列を直接使用して値を直接取得できますか?それとも、テーブルから値を取得sensor_table_nameするクエリと取得するクエリの 2 つのクエリを実行する必要がありますか?sensor_table_name

4

3 に答える 3

3

センサー テーブル名の規則を使用すると、特定のセンサーに対してクエリを実行するテーブルを見つけるためだけにクエリを実行する必要がなくなります。

たとえば、Sensor ID が Wolverine967 で、これらのテーブルの命名規則が Sensor_ + Sensor ID である場合、テーブル Sensor_Wolverine967 をクエリできることがすぐにわかります。

于 2012-08-23T13:51:03.070 に答える
2

センサーと一致する名前のSQLステートメントを動的に生成するよりも、テーブルのパーティション分割を使用する方が良い解決策のように思えます。センサー名でパーティション化することもできますが、それは問題なく機能します。ただし、(要約せずに)年間数十億の読み取り値を永久に保持する予定がない場合は、日付範囲で分割して、最終的なデータのパージをはるかに簡単にすることができます。

これは、SQLステートメントをその場で生成するよりもパフォーマンスが高く、管理が容易なはずです。

于 2012-08-23T11:51:34.477 に答える
0

残念ながら、通常のリレーショナル データベースを使用する場合、2 つのクエリを実行する必要があります。1 つは sensor_table_name を取得するため、もう 1 つはそのテーブルから値を取得するためです。

于 2012-08-23T09:53:09.993 に答える