我花了最后一周在Cassandra上填写,尝试了解基础知识,以及是否符合我们的需求。我认为我现在在基本层面上理解它,但如果它像我相信我被告知那样......我只是不知道它是否合适。
我们有一个微服务平台,它本质上是我们客户之间的大型数据总线。他们使用一组API来推送和拉取共享数据。到目前为止,过滤非常简单......但是没有办法知道未来会带来什么。
在此平台之上是一个分析图层,其中包含基于传递数据的多个可视化(条形图,图形等)。
微服务平台是在MySQL上构建的,我们认为我们可以使用集群,我们真的没有太多的运气。最重要的是,变化是痛苦的,正如RDBMS世界中的课程一样。此外,我们预计会有成千上万的并发用户提供大量数据 - 似乎我们会遇到不可避免的扩展问题。
因此,我们开始将Cassandra视为分布式nosql潜在替代品。
我观看了DataStax视频,在另一个网站上开了一门课程,然后开始挖掘。我发现的是:
虽然这些概念对我来说很有意义,但我很难看出它如何适合大多数长期数据库需求。如果数据在多个不同的表中是多余的......如何在多个表中管理和保持一致?在这种情况下,物化是否能够找到答案?
我希望喜欢这个想法,并喜欢分布式功能,但坦白说,此时大部分都是吓跑了。在过去的一周里,我觉得我学到了很多,什么也没学到,我完全不确定如何继续学习。
我调查了JanusGraph,Elassandra等,看看它是否会在Cassandra之上提供一个更简单的界面,将它降级为基本上是一个存储引擎,但我不相信这些东西很多都已经足够成熟甚至是正确的,我们需要什么。
我想我正在寻找那些使用Cassandra建造东西的人的方向和见解,看看它是否适合我们正在做的事情。不幸的是,我离开了研发时间。谢谢!
答案 0 :(得分:4)
Cassandra非常擅长它的功能,但它不是RDBMS的替代品。如果您发现需要以下任何一项,我不鼓励您迁移到Cassandra:
现在,对于你使用MySQL达到某些限制(或者认为你将来会发现它们),这里有一些想法:
答案 1 :(得分:3)
了解Cassandra - 它可以取代RDBMS吗?
这里简短的回答是" NO。"当您突然需要扩展时,Cassandra不是RDBMS的简单替代品。
虽然这些概念对我来说很有意义,但我很难看出这是否符合大多数长期数据库需求。
符合长期数据库需求如果您将其应用于正确的用例。
免责声明:我是有点像Cassandra狂热者。我已经使用了一段时间,为这个项目做了一点贡献,被命名为" Cassandra MVP,"甚至还合着了一本关于它的书。我认为它是伟大的技术,你可以用它做出惊人的事情。
话虽如此,但有很多事情并不擅长:
查询灵活性。为了满足操作规模而在多个节点上传播行所做的权衡是, 提前知道您的查询模式,然后严格遵循它们。这个想法是,您希望由单个节点提供所有查询。而且,您必须对数据模型进行一些思考才能实现这一目标。未绑定的查询(SELECT
没有WHERE
条款)成为敌人。
就地更新数据。计划通过密钥存储值,但随后更新它们(例如:状态)?卡桑德拉并不适合这种情况。这是因为Cassandra有一个基于日志的存储引擎,它不会覆盖任何东西......它只是废弃它。因此,您之前的值仍然存在,并且仍占用空间和计算资源。
删除数据。删除分布式数据库世界中的数据非常棘手。毕竟,如何将 nothing 复制到另一个节点? Cassandra对这个问题的回答是使用一个名为墓碑的结构。墓碑占用空间,可能会降低性能,并且需要保持足够长的时间来复制(使其移除变得棘手)。
维护数据一致性。 Cassandra具有高可用性和分区容错性,它采用了最终一致性的概念。"因此,毫不奇怪它真的不是为了保持一致而设计的。它有很多机制可以帮助保持数据的一致性,但它们远非完美。另外,如果您的数据处于同步状态,确实无法确定 。
如果数据在多个不同的表中是多余的......如何在这些表中管理和保持一致?在这种情况下,物化是否能够找到答案?
物化观点是我在可预见的未来继续远离的观点。他们进行实验"因为某种原因。基本上,一旦他们不同步,让他们重新同步的唯一方法就是重建它们。
我指导我的开发团队保持他们的查询表(包含相同数据的表,只是以不同方式键入)与BATCH
语句同步。事实上,BATCH是一个用词不当,因为它可能应该被称为" ATOMIC"代替。由于它的名称,它被严重误用,其误用会导致问题。但是,它确实保持原子上的突变,所以这确实有帮助。
基本上,仔细检查您的数据库要求。如果Cassandra没有削减它,那么试着找到一个。 CockroachDB(或其他一个NewSQL)可能更适合您所谈论的内容。它试图成为Postgres的一个插件,并且它与一些类似Cassandra的机制一起扩展,所以它可能值得研究。