使用Apache Cassandra在用户定义的类型中搜索

时间:2016-01-03 10:28:36

标签: cassandra cql3 user-defined-types

在这个例子中:

CREATE TYPE address (
    street text,
    city text,
    zip_code int,
    phones set<text>
)

CREATE TABLE users (
    id uuid PRIMARY KEY,
    name text,
    addresses map<string, address>
)

如何使用city = newyork查询用户或查找具有特定电话号码的用户。

1 个答案:

答案 0 :(得分:3)

这不是查询用户定义类型的问题:假设address是一个text列,而addresses将包含一个地址(即。{ {1}});问题是一样的。

除了主键之外的其他任何内容都不能查询您的用户表,在这种情况下,主键是分区键,它是addresses TEXT,这使得它几乎无用。

如果您想按名称查询用户,我会反规范化(这意味着一些重复)并制作一个UUID表:

users_by_name

CREATE TABLE users_by_name( name TEXT, id UUID, addresses whatever, PRIMARY KEY((name), id) ) 存储用户(它们应该是唯一的),并且将按name排序检索结果(id是主键的群集键部分)。

按地址查询也是如此:

id

您可能认为它并没有真正解决您的问题,但看起来您从关系数据库(SQL)的角度设计了数据模型,这不是Cassandra的目标。