1

我打算使用 Riak 来存储一些传感器数据,但是传感器连接到不同的用户。我的计划是做一个这样的结构: Bucket = user id key = time, new key 每分钟(或者两分钟)

当我每分钟说一个新键时,读数并不总是连续的,也不是实时的,但它们稍后会上传。它们是在一天中的特定时间段记录的。测光频率相当高,每秒 250 个样本。如果我为每次测量创建一个新键,我会很快得到一个键的爆炸,我认为这对性能没有好处。除此之外,我真的不需要知道每个给定时刻的精确数字,我会在一段时间内更按顺序使用它们(从 N 分钟到 M 分钟的值)。

因此,我正在考虑将每分钟的结果“分组”,并将它们存储为一些 JSON。

这个策略看起来可行吗?

另外,我正在考虑使用 LevelDB 作为存储引擎,只是为了安全起见,就 RAM 使用而言。

4

1 回答 1

2

对我来说,较低的键数似乎比每个事件的键数更好。您以后将如何使用这些数据?

如果数据用于进一步分析,leveldb 和二级索引允许您在 mapreduce 作业中选择特定时期的数据(如果您的键以某种方式排序,例如 datetime)(通过额外的努力可以在后台完成)。此外,leveldb 不会将所有键存储在内存中,如果您打算永久存储所有数据,这对于不断增长的数据集很有用。

如果您的应用程序依赖于可预测的延迟并且每次查询需要固定数量的数据最好将应用程序所需的数据分组(对于一个对象中的所有键采样 10 分钟)。

另一个问题是总对象大小,正如 riak 文档所说,单个对象的大小最好不要超过 10mb。

于 2013-09-12T05:09:03.813 回答