時系列のセンサーデータを 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) のより適切な型指定を可能にしますが、テーブルが見苦しくなります。
- コレクション型の使用を避けると、パフォーマンスは向上しますか?
新しいセンサー データの種類が追加されるたびに列を追加し続けることは心配する必要がありますか?
他にどのような要因を考慮する必要がありますか?
- このシナリオについて、他にどのようなデータ モデリングのアイデアがありますか?
ありがとう、クリス