通过用户定义类型进行CQL分页

时间:2015-10-21 05:02:09

标签: cassandra cql datastax-java-driver

假设我有这张表

CREATE TABLE mykeyspace.post (
  id uuid PRIMARY KEY,
  title text,
  photos set<frozen <photoIds>>
); 

和UDT:

CREATE TYPE mykeyspace.photoIds (
  photoId uuid,
  details text
);

我如何通过photos分页,对于给定的帖子photos,每次代表10 id

2 个答案:

答案 0 :(得分:3)

不支持对集合进行分页。

请参阅reference manual

  

保持集合较小以防止在查询期间出现延迟,因为Cassandra会完整地读取集合。该集合不在内部分页。

     

如前所述,集合旨在仅存储少量数据。

答案 1 :(得分:1)

我可以为你的桌面帖子提出另一种模式:

CREATE TABLE mykeyspace.post (
  id uuid,
  title text static,
  photo photo,
  PRIMARY KEY (id, photo)
);

CREATE TYPE mykeyspace.photo (
  id uuid,
  details text
);

此架构意味着:

  • id =&gt;有一个分区分区相当于帖子
  • 分区/帖子中有一个标题
  • 分区/帖子
  • 有多个照片ID

此模式应该可以很好地满足您的目标,直到您通过分区/帖子达到约100.000张照片。 如果您之前从未使用过静态列,可以参考Datastax documentation

驱动程序可以为您进行分页。请参阅Datastax Java驱动程序文档中的Paging Feature

Cql查询如下所示:

select photo.id, photo.details from post where id=*your_post_id*;

PS:我认为您不应该在架构中使用大写字母。