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

Search in user defined type with Apache Cassandra

在这个例子中:

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 的用户或查找具有特定 phone 号码的用户。

这实际上不是查询 user-defined 类型的问题:假设 address 将是单个 text 列并且 addresses 将包含单个地址(即 addresses TEXT);问题是一样的。

你的用户 table 除了主键之外,其他任何东西都不意味着 query-able,在本例中是分区键,它是一个 UUID准没用。

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

CREATE TABLE users_by_name(
  name TEXT,
  id UUID,
  addresses whatever,
  PRIMARY KEY((name), id)
)

其中用户按name存储(他们应该是唯一的)并且检索结果将按id排序(id是主键的聚类键部分).

同样适用于按地址查询:

CREATE TABLE users_by_name(
  city TEXT,
  street TEXT,
  name TEXT,
  id UUID,
  PRIMARY KEY((city), street)
)

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