我想存储与用户相关的数据,每个数据块都有自己的ID。 id是用户id加上特定信息位的id。这些数据也是基于时间的,读数将是写入的50%。我正在考虑使用以下之一:
这里的id将是userid + data id,全部为1个字符串。这意味着1个用户的数据将位于不同的节点中。
这里的id = userid和dataid是一个集群ID。这意味着用户的所有数据都将位于1个节点中。
因此,对于此用户的1个请求,我可能需要查询2-3个或更多这些行。
哪种方法在性能方面最好?
答案 0 :(得分:1)
我认为您对某些时间查询感兴趣,因为您提及时间序列。答案取决于您正在追求的查询类型。
a)如果要查询按时间排序的给定用户的所有行,则第二个模式到目前为止更好。在第一个模式中,您的数据由用户和 dataid进行分区,因此您放弃了为每个用户运行快速查询的功能,因为即使该单个用户的各种数据也将分布在整个群集中(假设你使用默认分区器。)
b)如果你想按用户查询和按时间排序的dataid(为了得到这一条数据的变化历史,让我们说),因为与概述的原因相同,模式1会更好在#1。
c)如果要按时间全局查询,两个模式都会很慢,因为您需要扫描多个用户(整个集群)以满足查询。
最后,无论您采用何种模式,写作都会相对较快。