cassandra,这是用户相关数据的最佳架构?

时间:2014-04-07 11:00:24

标签: cassandra

我想存储与用户相关的数据,每个数据块都有自己的ID。 id是用户id加上特定信息位的id。这些数据也是基于时间的,读数将是写入的50%。我正在考虑使用以下之一:

  1. 使用群集顺序创建表d1(id text,time bigint,data bigint,主键(id,time))(time desc)
  2. 这里的id将是userid + data id,全部为1个字符串。这意味着1个用户的数据将位于不同的节点中。

    1. 使用群集顺序创建表d2(id文本,dataid文本,time bigint,数据bigint,主键(id,dataid,time))(time desc)
    2. 这里的id = userid和dataid是一个集群ID。这意味着用户的所有数据都将位于1个节点中。

      因此,对于此用户的1个请求,我可能需要查询2-3个或更多这些行。

      哪种方法在性能方面最好?

1 个答案:

答案 0 :(得分:1)

我认为您对某些时间查询感兴趣,因为您提及时间序列。答案取决于您正在追求的查询类型。

a)如果要查询按时间排序的给定用户的所有行,则第二个模式到目前为止更好。在第一个模式中,您的数据由用户 dataid进行分区,因此您放弃了为每个用户运行快速查询的功能,因为即使该单个用户的各种数据也将分布在整个群集中(假设你使用默认分区器。)

b)如果你想按用户查询和按时间排序的dataid(为了得到这一条数据的变化历史,让我们说),因为与概述的原因相同,模式1会更好在#1。

c)如果要按时间全局查询,两个模式都会很慢,因为您需要扫描多个用户(整个集群)以满足查询。

最后,无论您采用何种模式,写作都会相对较快。