Cassandra - 具有非主键缺点的 WHERE 子句
Cassandra - WHERE clause with non primary key disadvantages
我是 cassandra
的新手,我正在将其用于分析任务(需要良好的索引)。
我在这个 post(和其他)中读到: 我无法使用 WHERE clause
.[=16= 的非主键列查询我的数据库]
这样做,似乎有3种可能性(都有重大缺点):
- 创建二级索引(由于性能问题不推荐)。
- 创建一个新的table(我不想要冗余数据,即使它可以用cassandra)。
- 将我要查询的列放在主键中,在这种情况下,我需要在我的 WHERE 子句中定义主键的所有部分,并且我不能使用
IN
以外的其他运算符或 =
.
有没有其他方法可以在没有上述 3 个约束的情况下完成我正在尝试做的事情(WHERE clause
使用非主键列)?
在 Cassandra 内部,您只能使用上面指定的选项。如果你想知道为什么看这里:
A Deep Look to the CQL Where Clause
但是,如果您尝试 运行 分析存储在 Cassandra 中的信息,那么您是否考虑过使用 Spark。 Spark 专为分布式系统上的大规模数据处理而构建。事实上,如果您正在考虑使用 Datastax(请参阅 here),它在 Spark 和 Cassandra 之间具有一些很好的集成功能,专门用于加载和保存数据。它有免费(社区)和付费(企业)版本。
我假设 table 是为不同的目的而设计的,因为您要查询的字段不是分区键的一部分。我的建议是复制 table 并按要查询的字段键入它。我建议根据 Data modeling concepts.
的确切用途设计一个新的 table
Cassandra 通过对您可以使用 CQL 执行的操作施加某些限制,提供了线性缩放等多种优势。
我在使用cassandra 2.x 版本时遇到了类似的问题,请将您的版本升级到cassandra 3.0 及以上版本。这是我唯一的解决方案。
请尝试在您的查询中使用 IF
:
UPDATE [keyspace_name.] table_name
[USING TTL time_value | USING TIMESTAMP timestamp_value]
SET assignment [, assignment] . . .
WHERE row_specification
[IF EXISTS | IF condition [AND condition] . . .] ;
见https://docs.datastax.com/en/archived/cql/3.3/cql/cql_reference/cqlUpdate.html
我是 cassandra
的新手,我正在将其用于分析任务(需要良好的索引)。
我在这个 post(和其他)中读到: 这样做,似乎有3种可能性(都有重大缺点): 有没有其他方法可以在没有上述 3 个约束的情况下完成我正在尝试做的事情(WHERE clause
.[=16= 的非主键列查询我的数据库]
IN
以外的其他运算符或 =
.WHERE clause
使用非主键列)?
在 Cassandra 内部,您只能使用上面指定的选项。如果你想知道为什么看这里:
A Deep Look to the CQL Where Clause
但是,如果您尝试 运行 分析存储在 Cassandra 中的信息,那么您是否考虑过使用 Spark。 Spark 专为分布式系统上的大规模数据处理而构建。事实上,如果您正在考虑使用 Datastax(请参阅 here),它在 Spark 和 Cassandra 之间具有一些很好的集成功能,专门用于加载和保存数据。它有免费(社区)和付费(企业)版本。
我假设 table 是为不同的目的而设计的,因为您要查询的字段不是分区键的一部分。我的建议是复制 table 并按要查询的字段键入它。我建议根据 Data modeling concepts.
的确切用途设计一个新的 tableCassandra 通过对您可以使用 CQL 执行的操作施加某些限制,提供了线性缩放等多种优势。
我在使用cassandra 2.x 版本时遇到了类似的问题,请将您的版本升级到cassandra 3.0 及以上版本。这是我唯一的解决方案。
请尝试在您的查询中使用 IF
:
UPDATE [keyspace_name.] table_name
[USING TTL time_value | USING TIMESTAMP timestamp_value]
SET assignment [, assignment] . . .
WHERE row_specification
[IF EXISTS | IF condition [AND condition] . . .] ;
见https://docs.datastax.com/en/archived/cql/3.3/cql/cql_reference/cqlUpdate.html