我正在尝试找到最好的数据模型来适应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),一系列日期甚至一无所有进行过滤。 此外,根据过滤器,用户应该能够设置可见性。
我试图处理这个案子,但我真的可以找到一个可持续的解决方案。 我得到的最好的是创建另一个表,我需要跟上原来的表。 该表将包含:
另外,为每个过滤器组合创建一个物化视图,这很疯狂。
我可以避免创建第二个表吗?在这种情况下,什么是最好的Cassandra模型?我应该考虑转用其他技术吗?
答案 0 :(得分:0)
我从上一个问题开始。
>在这种情况下,最好的Cassandra模型是什么?
如Cassandra: The Definitive Guide, 2nd edition中所述(我强烈建议您在选择或使用Cassandra之前阅读),
在Cassandra中,您不是从数据模型开始; 从查询模型开始。
您可能希望在Safaribooksonline.com阅读有关数据设计的可用章节。基本上,Cassandra希望您只考虑查询而不关心规范化。
所以
的答案>我可以避免创建第二个表吗?
你不应该避免。
>我应该考虑转用其他技术吗?
这取决于您在复制和分区方面的需求。您最终可能会基于RDBMS或其他内容创建主 - 主同步。在Cassandra中,你最终会得到表之间的重复数据,这对它来说是完全正常的。您可以交换磁盘空间以换取读/写速度。
>如何动态过滤和更新大表?
如果完成上述所有操作后仍然想在Cassandra中使用规范化数据模型,我建议您先查看secondary indexes,然后转到Lucene index等自定义索引。