Cassandra - 保存来自多个用户的可穿戴设备的数据

时间:2016-05-19 12:10:38

标签: database-design cassandra time-series database nosql

我们需要存储来自可穿戴设备(想想Fitbit)的数据,以供很多用户进行缓存。数据的分辨率为一分钟,我们目前关注的是六个变量。经过一番研究,我们决定使用Cassandra 数据库应该是可扩展的,并且变量的数量可能会增加。将只有一种类型的查询:在datetime和datetime之间获取ownerId的所有变量 我们想到了这个问题的多种解决方案:

第一种方法是使主键由ownerId和日期(或可能是一个月或一年)组成,并将变量与时间(可能是日和月)结合起来作为其他列键。

| Primary key        | variable1:hh:MM | variable2:hh:MM | ... |
|--------------------|-----------------|-----------------|-----|
| ownerId + yy-mm-dd | value           | value           | ... |
| ownerId + yy-mm-dd | value           | value           | ... |
| ...                | ...             | ...             |     |

这将产生大约合理数量的列,并且可以轻松添加变量并且可以很好地扩展。但是,这也意味着一个列族都存在。

第二个选项是为每个ownerId:

创建一个列族
| Primary key | variable1:hh:MM | variable2:hh:MM | ... |
|-------------|-----------------|-----------------|-----|
| yy-mm-dd    | value           | value           | ... |
| yy-mm-dd    | value           | value           | ... |
| ...         | ...             | ...             |     |

然而,这意味着将有数千或数百万个列族。

第三个选项是为每个变量创建一个列族:

| Primary key        | hh:MM | hh:MM | ... |
|--------------------|-------|-------|-----|
| ownerId + yy-mm-dd | value | value | ... |
| ownerId + yy-mm-dd | value | value | ... |
| ...                | ...   | ...   |     |

这样可以非常轻松地添加新变量,但由于我们的查询总是需要所有变量,因此需要查找数据六次或更多次。

我们错过了任何选择吗?您认为哪个最符合我们的目标?

0 个答案:

没有答案