给定cassandra模式的优缺点

时间:2016-04-14 12:51:24

标签: cassandra cql datastax cql3 datastax-java-driver

我有这个模式将post及其注释存储在同一个表中:

CREATE TABLE post ( 
  post_id int,
  access_key text,
  comment_id int,
  title text,
  comments FROZEN <type_comment>,
  PRIMARY KEY ((post_id, access_key), comment_id)
);

CREATE TYPE ks_test.type_comment (
  id int,
  content text
);

这是一个示例数据

post_id | access_key | comment_id | comments                 | title
---------+------------+------------+--------------------------+--------------
       1 | about_post |          1 |                     null | this is post
       1 |   comments |          2 | {id: 2, content: 'cmn1'} |         null
       1 |   comments |          3 | {id: 3, content: 'cmn2'} |         null
       1 |   comments |          4 | {id: 4, content: 'cmn3'} |         null

我正在使用此架构,因此我只能访问一个表来获取post及其注释。专业人士会怎样?这个架构的缺点?

1 个答案:

答案 0 :(得分:2)

如果你能弄清楚如何填写id字段,那真的很好并且会有效。

我认为comment_id中的idtype_comment是多余的。可以使用comments替换整个content列。

我个人会用时间uuid替换post_id,因为Cassandra中没有自动递增的东西id。在分布式环境中自动递增全局唯一标识符很困难。有一些东西要为你做,但实际上,只使用时间uuid / random uuid是最简单的。

CREATE TABLE post ( 
  post_id uuid,
  access_key text,
  comment_id timeuuid,
  title text,
  content text,
  PRIMARY KEY ((post_id, access_key), comment_id)
);

如果想按日期抓住它可以做类似的事情

CREATE TABLE post ( 
  year int,
  month int,
  access_key text,
  comment_id timeuuid,
  title text,
  content text,
  PRIMARY KEY ((access_key, year, month), comment_id)
);

然后您可以按月抓取,也可以在该月的某个时段内使用范围。也可以做一个&#34; time_bucket&#34;将年/月替换为等时间字符串,如&#34; 2016-01-01 00:00:00&#34;你可以更容易地改变分组(即月,日等)。