最佳的里亚克存储策略



我打算使用 Riak 来存储一些传感器数据,但传感器连接到不同的用户。我的计划是制作这样的结构:存储桶 = 用户 ID键 = 时间,每分钟(或两分钟)新键

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

所以我正在考虑对每一分钟的结果进行"分组",并将它们存储为一些 JSON。

这个策略看起来可行吗?

另外,我正在考虑使用LevelDB作为存储引擎,只是为了在RAM使用方面

安全起见。

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

如果数据用于进一步分析,leveldb 和二级索引允许您在 mapReduce 作业中选择特定时间段的数据(如果您的键以某种方式排序,例如日期时间)(额外的工作可以在后台完成)。此外,leveldb 不会将所有密钥存储在内存中,如果您打算永久存储所有数据,它有利于持续增长的数据集。

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

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

最新更新