Tuc*_*uco 2 cassandra in-memory-database hazelcast ignite redis-cluster
我们正在寻找一个可以支持索引的内存数据库中的开源.
用例是我们有很多项目会在很大程度上增长.每个项目都有一些我们需要查询的字段.目前,我们将数据存储在应用程序的内存中.但是随着数据的增加,我们必须考虑分发/分片数据库.
我们已经看了几个选项
可以使用 Redis集群,但它没有索引或SQL查询等概念.
Apache Ignite既可以在内存中,也可以分发,也可以提供SQL查询.但是,问题是ignite会将所有查询激活到所有主节点,因此最终结果将比这些查询中最慢的结果慢.这似乎是一个问题,因为许多节点中的非执行/慢节点可能会真正减慢应用程序的速度.进一步点燃,从主服务器完成读取并且不使用从服务器,因此难以扩展查询.增加节点将产生负面影响,因为查询的数量将增加,甚至会更慢.
我们对其他解决方案持开放态度,但想知道多查询是否会成为一个问题(如hazelcast).
对于我们的用例,理想的解决方案是内存数据库,其索引可以通过增加从站的数量来读取.使其分布/分片将导致多个查询,我们不情愿,因为一个错误的节点可能会降低整个系统的速度.
tom*_*jok 11
Hazelcast支持索引(排序和未排序)以及重要的是Hazelcast没有Multi-Query问题.
Hazelcast支持将PartitionPredicate查询的执行限制为一个节点,该节点是传递给该构造函数的密钥的primaryReplica PartitionPredicate.因此,如果您知道数据所在的位置,则只需查询此节点即可.因此,无需修复或实现任何支持它,您可以立即使用它.一直使用它可能是不合理的.取决于您的用例.
对于扫描大量数据但返回小结果的复杂查询,最好使用OBJECTinMemoryFormat.您应该获得出色的执行时间和较低的延迟.
小智 9
免责声明:我是GridGain员工和Apache Ignite提交者.
关于您的担忧的一些评论:
1)慢节点几乎会在任何集群环境中导致问题,因此我不认为这是一个缺点.这是你应该拥抱和接受的现实.有必要了解为什么它很慢并修复/升级它.
2)Ignite能够执行从常规缓存操作[1]和通过REPLICATED缓存执行的SQL查询的从属读取.实际上,使用REPLICATED缓存作为参考数据是允许Ignite顺利扩展的最重要功能之一.
3)正如您所正确提到的,当前查询被广播到所有数据节点.我们将改进它.首先,我们将允许用户指定分区来执行[2]的查询.其次,我们将改进我们的优化器,以便它会提前尝试计算目标数据节点以避免广播[3],[4].两项改进都将很快公布.
4)最后,但并非最不重要 - 持久层将在几个月内发布[5],这意味着Ignite将成为具有内存和持久性功能的分布式数据库.
[2] https://issues.apache.org/jira/browse/IGNITE-4523
[3] https://issues.apache.org/jira/browse/IGNITE-4509
[4] https://issues.apache.org/jira/browse/IGNITE-4510
| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |