索引的Apache Ignite缓存与优化的内存CassandraDB对比分析

5
对于一个复杂的实时Apache Storm拓扑结构,我需要对存储在CassandraDB中的数据进行聚合以供某些计算步骤使用。目前的做法是在需要时使用CQL(Cassandra查询语言)查询数据并在Storm bolt中进行聚合。这有点慢,因此我们希望将需要聚合的数据缓存起来。现在有两个选择:
  • 将所需数据放入一个带索引的Ignite Cache中,并从Storm中进行滑动窗口查询。在这种情况下,我们只需要一个Cache,并使用不同的查询,具体取决于聚合需求。
  • 将数据放入Cassandra的内存外缓存中。
支持使用Ignite的理由:我们只需要一个带索引的缓存,而对于快速访问,我们需要为每个聚合创建一个Cassandra表。(还有ACID,但显然我们已经兼容CAP,因此并不是我们架构师的重要论点。) 支持使用Cassandra的理由:我们不需要引入新技术。
但是,速度如何呢?与为每个查询优化(即为每个查询创建自己的表)的内存中的Cassandra相比,带有索引的Ignite缓存速度会更快吗?
1个回答

0

我相信在Ignite中使用内存索引的SQL会比Cassandra CQL查询更快。Apache Ignite兼容ANSI-99 SQL,因此您应该能够执行各种聚合、连接、排序、分组等操作。

我将在Ignite社区中提出一个观点,看看是否可以对Cassandra CQL进行与Ignite SQL的基准测试。完成后,将在此处发布结果。


如果我需要聚合并且能够在数据库端完成,这将加快整个获取过程(连接上的数据量更少),但是如果我只想获取数据而不进行聚合呢?有什么技术原因可以使Ignite更快吗? - Make42
1
Ignite内存数据网格通常解决性能和可扩展性问题。如果您不需要Ignite SQL或缓存功能,并且对磁盘数据库性能满意,则我认为没有必要进行切换。 - Dmitriy
首先,感谢您的可靠回答。回到主题:我对磁盘速度不满意,但Cassandra不会在磁盘上运行,而是在内存中运行。通常情况下,Cassandra确实在磁盘上运行,但可以将数据缓存到内存中。这就是我要做的,也是我比较Ignite Cache的原因(请参见我的问题)。因此,在我的设置中,我确实需要我的数据在内存中(由Cassandra和Ignite Cache提供),但我不需要Ignite的数据库聚合功能,只需要获取数据。我的问题是,在这些情况下,这两种技术如何进行比较。 - Make42
这方面有任何进展吗?已经进行了任何基准测试吗? - Make42
有很多情况下,Ignite被用作Cassandra的缓存层,并为写入和读取提供了数量级的性能提升。除此之外,您还将获得二级索引和内存查询性能的好处,包括分布式连接。更多关于Ignite Cassandra集成的信息,请参见:https://apacheignite-mix.readme.io/docs/ignite-with-apache-cassandra - Dmitriy
1
@Make42 最终发布了基准测试结果:https://dzone.com/articles/apachereg-ignite-and-apachereg-cassandra-benchmark - dmagda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接