1

下面是我希望在 Cassandra 中作为标准列族拥有的 POJO 的一瞥:

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

显然我的关键是我的主索引。不知道如何做清单?必须为它们创建一个新的 CF,还是将它们全部添加为列?
好的,所以我也希望通过相等搜索所有内容。获取电话= 1112223333 的人员获取名字=Al 和出生日期=yyyy-mm-dd 的人员

我说的是 1 亿人,所有列大多是唯一的 那么这是否排除了内置的二级索引?

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

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

4

1 回答 1

3

首先,二级索引不是正确的选择,因为它们在基数较低(即重复值很多)的情况下工作得很好。电话号码不能满足这一点。它们在技术上可以工作,但随着集群规模的增长,效率会降低。

你是对的,如果你需要一个没有二级索引的双向查找,最好的方法可能是维护你自己的索引。这遵循以您需要读取数据的方式写入数据的一般设计理念。来自 RDBMS 世界可能需要一些时间来适应,因为您已经习惯了规范化。

我认为您缺少的部分是您需要将电话号码存储在两个地方——您的个人 CF 和索引。这将允许您查看电话的人和电话的人。当您需要添加/删除手机时,您将同时在两个地方进行操作。您只是将保持关系从 DBMS 转移到您的应用程序的逻辑。

于 2012-04-30T13:57:44.053 回答