了解 Cassandra - 它可以取代 RDBMS 吗?

Tsa*_*mba 3 cql bigdata cassandra microservices

上周我一直在 Cassandra 上死记硬背,试图了解基础知识,以及它是否适合我们的需求。我想我现在在基本层面上理解它,但如果它像我相信我被告知的那样工作......我只是不知道它是否合适。

我们有一个微服务平台,它本质上是我们客户之间的大型数据总线。他们使用一组 API 来推送和拉取共享数据。到目前为止,过滤非常简单……但无法知道未来会带来什么。

该平台的顶部是一个分析层,具有基于传递的数据的多个可视化(条形图、图形等)。

微服务平台建立在 MySQL 之上,其想法是我们可以使用集群,老实说,我们对此并不走运。最重要的是,变化是痛苦的,就像 RDBMS 世界中的课程一样。此外,我们预计会有大量数据和成千上万的并发用户 - 似乎我们将遇到不可避免的扩展问题。

因此,我们开始将 Cassandra 视为分布式 nosql 的潜在替代品。

我观看了 DataStax 视频,在另一个网站上学习了课程,然后开始深入研究。我发现的是:

  • 数据在多个表中冗余存储,每个表使用不同的主键和集群键,以启用不同类型的查询,因为行分散在集群中的不同节点上
  • 而不是加入,这是不支持的,你会反规范化并创建具有大量列的“宽”表
  • 数据最终是一致的,因此新的写入可能无法在可预测的合理时间内轻松读取。
  • CQL 虽然类似于 SQL,但主要是谎言。您存储和键控数据的方式决定了您可以使用哪些类型的查询。它似乎非常有限和不灵活。

虽然这些概念对我来说很有意义,但我正在努力了解这将如何满足大多数长期数据库需求。如果数据在几个不同的表中是冗余的……它是如何在这么多表中管理和保持一致的?在这种情况下,物化视图是答案吗?

喜欢这个想法并喜欢分布式功能,但坦率地说,在这一点上,我最害怕。我觉得我在上周学到了很多东西,但什么也没学到,我完全不确定如何继续。

我查看了 JanusGraph、Elassandra 等,看看它是否会在 Cassandra 之上提供一个更简单的界面,将其降级为基本上一个存储引擎,但我不确定这些东西中的许多是否足够成熟甚至合适,以满足我们的需要.

我想我正在寻找那些使用 Cassandra 构建东西的人的方向和洞察力,看看它是否适合我们正在做的事情。不幸的是,我的研发时间用完了。谢谢!

Aar*_*ron 5

了解 Cassandra - 它可以取代 RDBMS 吗?

这里的简短回答是“不”。当您突然需要扩展时,Cassandra 并不是 RDBMS 的简单替代品。

虽然这些概念对我来说很有意义,但我正在努力了解这将如何满足大多数长期数据库需求。

如果您将其应用于正确的用例,它可以满足长期的数据库需求。

免责声明:我有点卡桑德拉狂热者的。我已经使用它一段时间了,为该项目做出了微小的贡献,被评为“Cassandra MVP”,甚至与人合着了一本关于它的书。我认为这是一项很棒的技术,你可以用它做出惊人的事情。

话虽如此,但它有很多不擅长的地方:

  • 查询灵活性。将行分布到多个节点以满足操作规模的权衡是,您必须提前了解查询模式,然后严格遵循它们。这个想法是,您希望由单个节点提供所有查询。并且您必须对数据模型进行一些思考才能实现这一目标。未绑定的查询(SELECT没有WHERE子句的s )成为敌人。

  • 就地更新数据。计划通过一个键存储值,然后更新它们很多(例如:状态)?Cassandra 不适合这种情况。这是因为 Cassandra 有一个基于日志的存储引擎,它不会覆盖任何东西……它只是将它过时了。所以你之前的值仍然存在,并且仍然占用空间和计算资源。

  • 删除数据。在分布式数据库世界中删除数据很棘手。毕竟,您如何不将任何内容复制到另一个节点?Cassandra 对这个问题的回答是使用一种称为墓碑的结构。墓碑占用空间,会降低性能,并且需要保留足够长的时间以进行复制(使其移除变得棘手)。

  • 维护数据一致性。Cassandra 具有高可用性和分区容错性,因此采用了“最终一致性”的概念。因此,它的设计确实不具有一致性也就不足为奇了。它有很多机制可以帮助保持数据的一致性,但它们远非完美。另外,确实没有办法确定您的数据是否同步。

如果数据在几个不同的表中是冗余的……它是如何在这么多表中管理和保持一致的?在这种情况下,物化视图是答案吗?

在可预见的未来,我将继续远离物化视图。他们是“实验性的”是有原因的。基本上,一旦它们不同步,让它们恢复同步的唯一方法就是重建它们。

我指导我的开发团队保持他们的查询表(包含相同数据的表,只是键控不同)与BATCH语句同步。事实上,BATCH 用词不当,因为它可能应该被命名为“ATOMIC”。由于它的名字,它被严重误用,误用会导致问题。但是,它确实保持原子应用的突变,所以这确实有帮助。

基本上,仔细检查您的数据库要求。如果 Cassandra 不削减它,然后尝试找到一个。CockroachDB(或其他 NewSQL 之一)可能更适合您所谈论的内容。它试图成为 Postgres 的替代品,并且使用一些类似 Cassandra 的机制进行扩展,因此它可能值得研究。