Cassandra用户维护了CF索引

时间:2012-04-28 22:25:15

标签: java cassandra

下面是我想要作为标准列系列的POJO的一瞥 卡桑德拉:

class Person {
string key
string name
string dob
List<String> phones
List<String> ids }

显然我的关键是我的主要索引。 不确定怎么做列表?必须为它们创建一个新的CF,或者将它们全部添加为列?
好的,所以我也想通过平等搜索所有东西。 得到电话= 1112223333的人 获取firstname = Al和dob = yyyy-mm-dd

的人

我说的是1亿人,所有列都是独一无二的 那么这排除了内置的二级索引吗?

我“得到”将自己的CF作为索引,其中主键是电话,列名是人员CF的主键。

但是如果我需要删除手机,给定键= 1234,我该如何维护手机的CF索引。 TIA Jurgyman

1 个答案:

答案 0 :(得分:3)

首先,二级索引不是正确的选择,因为它们在基数较低(即大量重复值)的情况下运行良好。电话号码不满足这一要求。它们在技术上会起作用,但随着集群规模的增长而效率低下。

你是正确的,如果你需要一个没有二级索引的双向查找,可能最好的方法是维护你自己的索引。这遵循了以您需要的方式编写数据的一般设计理念。来自RDBMS世界,这可能需要一些人习惯,因为你习惯于规范化。

我认为你遗失的那件事是你要将电话号码存储在两个地方 - 你的人CF和索引。这样您就可以通过手机查看手机上的人和手机了。当您需要添加/删除手机时,您将同时在两个位置执行此操作。您只是将保持关系的逻辑从DBMS转移到您的应用程序。