Cassandra,如何动态过滤和更新大表?

时间:2017-02-15 12:27:25

标签: database database-design cassandra

我正在尝试找到最好的数据模型来适应Cassandra中一个非常大的mysql表。 此表的结构如下:

CREATE TABLE big_table (
  social_id, 
  remote_id,
  timestamp,
  visibility,
  type,
  title,
  description,
  other_field,
  other_field,
  ...
  )

页面(不在此处)可以包含许多社交,其中可以包含许多remote_ids。

Social_id是分区键,remote_id和timestamp是聚类键:“Remote_id”给出单一性,“Time”用于对结果进行排序。到目前为止一切都很好。

问题是用户还可以搜索他们的页面内容,按一个或多个社交,一种或多种类型,可见性(可能是0,1,2),一系列日期甚至一无所有进行过滤。 此外,根据过滤器,用户应该能够设置可见性。

我试图处理这个案子,但我真的可以找到一个可持续的解决方案。 我得到的最好的是创建另一个表,我需要跟上原来的表。 该表将包含:

  • page_id:分区键
  • timestamp,social_id,type,remote_id:clustering key

另外,为每个过滤器组合创建一个物化视图,这很疯狂。

我可以避免创建第二个表吗?在这种情况下,什么是最好的Cassandra模型?我应该考虑转用其他技术吗?

1 个答案:

答案 0 :(得分:0)

我从上一个问题开始。

>在这种情况下,最好的Cassandra模型是什么?

Cassandra: The Definitive Guide, 2nd edition中所述(我强烈建议您在选择或使用Cassandra之前阅读),

  

在Cassandra中,您不是从数据模型开始; 从查询模型开始

您可能希望在Safaribooksonline.com阅读有关数据设计的可用章节。基本上,Cassandra希望您只考虑查询而不关心规范化。

所以

的答案

>我可以避免创建第二个表吗?

你不应该避免

>我应该考虑转用其他技术吗?

这取决于您在复制和分区方面的需求。您最终可能会基于RDBMS或其他内容创建主 - 主同步。在Cassandra中,你最终会得到表之间的重复数据,这对它来说是完全正常的。您可以交换磁盘空间以换取读/写速度。

>如何动态过滤和更新大表?

如果完成上述所有操作后仍然想在Cassandra中使用规范化数据模型,我建议您先查看secondary indexes,然后转到Lucene index等自定义索引。