我目前的做法:
除了存储在此存储桶中的应用程序元数据外,每个应用程序都有自己的存储桶名为“time_metrics / APPLICATION_KEY”,其中我以某种方式存储时间序列:
KEY - 时间戳/ VALUE - 某些属性
我担心的是在给定应用程序的特定时间窗口上进行查询的效率。目前为了从某个特定的时间窗口获取时间序列并最终进行一些缩减,我必须对整个“time_metric / APPLICATION_KEY”桶进行map / reduce,我发现的不是推荐的用例Riak Map/Reduce。
我的问题:这种系统的最佳数据库结构是什么,以及如何有效地查询它。
答案 0 :(得分:4)
添加到@ macintux的答案。
Basho已经有一些客户使用riak作为时间序列指标。 Boundary有一个nice tech talk关于他们如何使用Riak和他们的网络监控软件。他们将数据汇总到不同的时间块(1米,5米,15米)进行分析。 他们还有series of blog posts关于实施该系统的经验教训。
Kivra还有good slide deck关于他们如何使用riak使用时间序列数据。
您可以将数据汇总到某种任意时间长度,然后通过发出常规K / V获取来读取您需要的范围,然后在应用程序中重建更大的图片/缩小。
答案 1 :(得分:3)
如果你有足够的计算能力并且事先知道你需要什么密钥,你当然可以使用Riak的MapReduce,但是经常检索密钥并在客户端上运行你的处理速度会一样快(并且不会使你的集群紧张)。
一些一般性的想法:
说了这么多,如果你正在做直接键/值请求(理想的是总是能够计算你需要的键,而不是做索引或搜索),Riak可以支持非常繁重的流量负载,所以我不建议花太多时间创建替代存储机制,除非你知道你将面临延迟问题。