【发布时间】:2020-04-13 00:41:31
【问题描述】:
我可能想使用erlacassa 在Cassandra 和Eralng 之间进行通信。它是一个 CQL 客户端。所以我想知道,与 thrift 访问的 cassandra 相比,CQL(cassandra 查询语言)有哪些限制?
例如,我在互联网上发现:
CQL 目前有一些限制,不支持诸如 作为 GROUP BY,ORDER BY
【问题讨论】:
我可能想使用erlacassa 在Cassandra 和Eralng 之间进行通信。它是一个 CQL 客户端。所以我想知道,与 thrift 访问的 cassandra 相比,CQL(cassandra 查询语言)有哪些限制?
例如,我在互联网上发现:
CQL 目前有一些限制,不支持诸如 作为 GROUP BY,ORDER BY
【问题讨论】:
这部分取决于您使用的 Cassandra 版本。例如,CQL 直到 CQL 3.0 才支持复合列(在 Cassandra 1.1 中可用,但默认情况下未启用)。但在大多数情况下,所有主要功能都在 thrift API 和 CQL 中可用。
对于group by,CQL 或 thrift API 都不支持。 Order by 在 CQL 3.0 中,但它仅用于指定反向排序(这与 Thrift 的限制相同)。听起来您发现的文章是在将 Cassandra 与传统的 SQL 数据库进行比较。
【讨论】:
order by,它会很高效,物有所值。
order by 在 CQL 中是对的(请参阅 CASSANDRA-3925)。我已经更新了答案以更好地反映它的工作原理。
除了语法差异之外,最大的不同是 CQL 伪装成 SQL,而 thrift API 没有这样的伪装。开发人员将看到 SQL 并做出根本不适用于 Cassandra 的关系假设。例如,这里有讨论提倡使用 order by。在 Cassandra 的世界中,最好对您希望访问数据的每一种方式的具体化视图进行非规范化,而不是通过更改查询。
不要误会我的意思。我认为用http://glennengstrand.info/nosql/cassandra/cql 之类的 DSL 替换 thrift 接口很有价值,但我相信熟悉 SQL 作为访问关系数据的一种方式将导致开发人员以无法扩展的方式使用 Cassandra。
【讨论】: