0

時系列のセンサーデータを Cassandra に保存する予定です。各センサーは、サンプル時点ごとに複数のデータ ポイントを持つことができます。デバイスごとにすべてのデータ ポイントをまとめて保存したいと考えています。

私が考えていたことの 1 つは、収集する可能性のあるさまざまなデータ型のすべての潜在的な列を作成することでした。

CREATE TABLE ddata (
  deviceID int,
  day timestamp,
  timepoint timestamp, 
  aparentPower int,
  actualPower int,
  actualEnergy int,
  temperature float,
  humidity float,
  ppmCO2 int,
  etc, etc, etc...
  PRIMARY KEY ((deviceID,day),timepoint)
) WITH
  clustering order by (timepoint DESC);

insert into ddata (deviceID,day,timepoint,temperature,humidity) values (1000001,'2013-09-02','2013-09-02 00:00:04',93,97.3);

 deviceid | day                      | timepoint                | actualenergy | actualpower | aparentpower | event | humidity | ppmco2 | temperature
----------+--------------------------+--------------------------+--------------+-------------+--------------+-------+----------+--------+-------------
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:04-0700 |         null |        null |         null |  null |     97.3 |   null |          93
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:03-0700 |         null |        null |         null |  null |     null |   null |          92
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:02-0700 |         null |        null |         null |  null |     null |   null |          91
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:01-0700 |         null |        null |         null |  null |     null |   null |          90

もう 1 つの考えは、特定のデバイスが報告する可能性のあるさまざまなデータ ポイントのマップ コレクションを作成することでした。

CREATE TABLE ddata (
  deviceID int,
  day timestamp,
  timepoint timestamp, 
  feeds map<text,int>,
  PRIMARY KEY ((deviceID,day),timepoint)
) WITH
  clustering order by (timepoint DESC);

insert into ddata (deviceID,day,timepoint,feeds) values (1000001,'2013-09-01','2013-09-01 00:00:04',{'temp':73,'humidity':99});

 deviceid | day                      | timepoint                | event      | feeds
----------+--------------------------+--------------------------+------------+----------------------------------------------------------
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:04-0700 |       null |                             {'humidity': 97, 'temp': 93}
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:03-0700 |       null |                                             {'temp': 92}
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:02-0700 |       null |                                             {'temp': 91}
  1000001 | 2013-09-02 00:00:00-0700 | 2013-09-02 00:00:01-0700 |       null |                                             {'temp': 90}

2 つのオプションについて、人々はどのように考えていますか?

  • 私が見ることができることから、最初のオプションはさまざまなデータ型 (int と float) のより適切な型指定を可能にしますが、テーブルが見苦しくなります。
  • コレクション型の使用を避けると、パフォーマンスは向上しますか?
  • 新しいセンサー データの種類が追加されるたびに列を追加し続けることは心配する必要がありますか?

  • 他にどのような要因を考慮する必要がありますか?

  • このシナリオについて、他にどのようなデータ モデリングのアイデアがありますか?

ありがとう、クリス

4

2 に答える 2

1

私が見ることができる即時の長所と短所:

    • 列を使用mapすると、「無制限」のメトリックを使用できます。(ただし、保存できるデータ量には制限があると思いますmap
    • map;から単一の値を読み取ることはできません。各メトリックの列がある場合は、一度に 1 つの値を読み取ることができます。内の単一の値を更新することは引き続き可能です。map
  1. 質問で述べたように、型のサポートは限られていますmap

これらは、私が見ることができる最も明白な違いです。

于 2013-09-21T07:07:16.707 に答える