试图看出有多宽和瘦的行被展开

coo*_*eze 1 cassandra

当你为宽行和瘦行设计表时,有人可以给出并告诉我数据是如何布局的.

我不确定我是否完全掌握数据如何以"宽"行展开.

在如何获取数据方面是否存在差异,或者它是否相同,即如果它是有序的,则数据是垂直(瘦)还是水平(宽)组织无关紧要.

更新 是否考虑了主键是否包含多个列?或者,只有当分区键是复合分区键时,表才会有宽行?

xma*_*s79 7

宽...瘦...使你的头爆炸的术语......我更喜欢过度简化这样的事情:

  1. 所有表都有宽行
  2. 你只需要照顾怎么行宽变

这允许我将其视为如下(稍微修改一下C*术语):

        Number of RECORDS in a partition
1 <--------------------------------------- ... 2Billion
      ^                         ^
  Skinny rows                  wide rows
Run Code Online (Sandbox Code Playgroud)

分区中的记录较少,skinner是"分区",反之亦然.

在为C*设计时,我始终牢记以下几点:

  • 当我的数据可以通过一个查询获取并且它完全包含在一个分区的一个记录中时,我想使用"瘦分区" .典型的例子是表格中有一个主键的形式,让我获得属于特定的所有数据.SELECT * FROM table WHERE username = 'xmas79';PRIMARY KEY (username)username
  • 当我的数据可以通过一个查询获取并且它完全包含在一个分区的多个记录中时,我想使用"宽行" .典型的例子是范围查询,例如,表中有一个主键的形式.SELECT * FROM table WHERE sensor = 'pressure' AND time >= '2016-09-22';PRIMARY KEY (sensor, time)

因此,第一种方法是一次性查询,第二种方法是范围查询.要注意的是第二种方法有(主要)的缺点,你可以保持将数据添加到分区,它得到越来越广泛,伤害表演.

为了控制分区的宽度,您需要向分区键添加一些内容.在上面的传感器例如,如果你不违背你的课程的要求,你可以在"组"一些测量日期,如你在一天按一天群体分裂的措施,使主键一样PRIMARY KEY ((sensor, day), time),这里的分区钥匙变成了(sensor, day).通过这种方法,您可以完全控制分区的宽度(好吧,至少说好).

您只需要在查询功能和所需性能之间找到一个很好的折衷方案.

我建议这三个读数进一步调查细节:

  1. Cassandra CQL中的宽行
  2. CQL是否支持动态列/宽行?
  3. CQL3为Cassandra专家

请注意,在第二个到最后一个图片中有一个错误:主键应该是

PRIMARY KEY ((user_id, tweet_id))

在列周围用双括号而不是一列.