如果不鼓励在 cassandra 1.2/Cql3 中使用动态列,那么它在功能上比 Mysql 好多少?

Posted

技术标签:

【中文标题】如果不鼓励在 cassandra 1.2/Cql3 中使用动态列,那么它在功能上比 Mysql 好多少?【英文标题】:If Dynamic columns are discouraged in cassandra 1.2/Cql3 , then how is it better than Mysql in functionality? 【发布时间】:2013-03-14 08:23:39 【问题描述】:

最初我开始学习 Cassandra,因为动态列引起了我的注意。随着我开始学习更多,我了解到复合主键比动态列更受欢迎,并且 Cassandra 正在转向基于模式(模式是可选的,不是强制性的,但建议使用)。在 cql3 中,这是强制性的,我读到 cql3 是 cassandra 中新应用程序的最佳方法。

这是我面临一个有趣问题的地方。我正在阅读一张特定的幻灯片(mysql vs Casssandra)-http://lanyrd.com/2012/austin-mysql-meetup-january/spdrx/(跳转到第 31 张幻灯片),其中讨论了欺诈检测用例。

“在 FraudDetection 中,为了计算风险,通常需要知道相关帐户曾经使用过的所有电子邮件、目的地、来源、设备、位置、电话号码等。”

解释了我们如何在关系世界中为电子邮件、目的地、来源等维护单独的表,以及在 cassandra 世界中使用动态列键和值是多么容易。 (31-34 张幻灯片)。

既然动态列的键和值不灵了,我们该如何解决这个问题呢?我们是否应该为每个电子邮件、目的地等维护单独的列族?那么它与关系世界有什么不同呢?仅与可扩展性有关吗?我们还能继续使用无模式方法吗?这是“架构是可选的和推荐的,但不是强制性的”的黄金法则吗?

谢谢

【问题讨论】:

【参考方案1】:

对不起,这里的混乱。事实证明,我没有正确理解基本概念。这是答案

动态列是 Cassandra 的核心。它们仍然受到支持并且仍然是核心 :) 它只是在节俭中您直接执行,而在 CQL 中您以不同的方式执行(通过模式方式)。但你仍然这样做:) - 阅读这个 - http://www.datastax.com/dev/blog/thrift-to-cql3

关于 Cassandra 如何优于 Mysql - 阅读此 http://lanyrd.com/2012/austin-mysql-meetup-january/spdrx/(16-24 张幻灯片)

谢谢:)

【讨论】:

【参考方案2】:

如果您使用 Thrift API 而不是 CQL,您仍然可以使用无模式方法。作为一名长期使用 Cassandra 的用户,我还发现推动预先定义模式的做法值得商榷。但幸运的是,底层存储机制是相同的,并且我所知道的所有客户端都支持使用基于 Thrift 的调用。

【讨论】:

这是老建议。有关如何过渡到 CQL 的详细信息,请参阅 this。【参考方案3】:

除了动态列之外,还有支持集合的东西,如 Sets、Lists、Maps。 动态性还不够吗

【讨论】:

但目前无法对它们进行索引,因此我们无法查询它们。不过,它们将在未来添加。

以上是关于如果不鼓励在 cassandra 1.2/Cql3 中使用动态列,那么它在功能上比 Mysql 好多少?的主要内容,如果未能解决你的问题,请参考以下文章

如果性能不重要,在 Cassandra 中使用 INDEX 是否很糟糕?

如果不存在,cassandra 创建密钥空间不起作用

如果键空间不存在,Cassandra 连接到集群

如何使用 Achilles 更新 cassandra 中的 TTL,如果不存在则抛出异常

如何在spark中读写cassandra数据

为啥 Cassandra 内部不支持聚合?