谁能说 Aerospike 是否像他们声称的那样好?我有点怀疑,因为它是一家商业企业。据我了解,他们刚刚发布了一个开源版本,但他们网站上的声明仍然可能被夸大了。
我对 Aerospike 与 MongoDB 的比较特别感兴趣。
我使用过 Aerospike、MongoDB 和 Redis,并测试了许多其他 NoSQL 数据库。我会说 Aerospike 非常擅长它的功能,但它与 MongoDB 不同。一切都取决于您计划使用数据库的目的。我可以给你一个我使用不同数据库的例子。我还可以讨论它们之间的差异并讨论 Aerospike 的好处。
MongoDB
我使用 MongoDB 作为 SQL 替代方案。在我的 MongoDB 数据库中,我有许多不同的字段。很多时候字段会发生变化,我会随机需要查询各个字段。这是一个非常非结构化的数据库,而 MongoDB 在这方面非常出色。我还使用 MongoDB 作为标准的键值存储。它的性能很好,但我让 MongoDB 在事务规模和数据库规模上的表现都不是很理想。诚然,数据库可能已经优化了一些,但我发现很难找到在不同情况下正确配置 MongoDB 的文档。
雷迪斯
Redis 是一个纯键值存储。Redis 最大的问题是它纯粹是在内存中的(它会使用磁盘作为备份,但你不能存储比可用内存更多的信息)。它的用途非常快。我个人将它用于小型事务数据库:我对键执行非常简单的功能,例如计算某个用户发生的事件的次数。我还进行快速内存查找,我需要映射到不同的值。Redis 对于小型数据集来说是一个很棒的工具,而且速度非常快。配置也非常简单。
气钉
当需要扩展时,我个人使用 Aerospike 来替换 Redis。据我了解,它可以用于更多。与 Redis 一样,Aerospike 是一个键值存储。我相信开源版本也支持 Redis 不支持的二级索引(我没有在生产中使用二级索引,但对它们进行了很少的测试)。
Aerospike 的最大特点是它的扩展能力。在研究 Aerospike 时,我需要解决的最大问题是扩展我的系统以处理大型数据集,同时保持极快的速度。我使用 Aerospike 的项目对速度有非常严格的要求。我通常进行 3-4 次数据库查找以及其他处理,并且需要低于 50 毫秒的事务时间。在 300GB 以上的数据集上进行了一些查找。我找不到解决方案来保存这些数据并使其在合理的时间内访问。除非我有一台具有 300GB 以上 RAM 的机器,否则 Redis 显然无法工作。MongoDB 在远低于 300GB 的大小时开始表现极差。所以我试了一下 Aerospike,它能够很好地处理所有事情。Aerospike 的最大优点:随着我的数据集的增长,我只需在需要时站起来一个新盒子就可以了。速度一直保持一致。
我还发现 Aerospikes 文档非常好。配置起来并不难,而且很容易为出现的任何问题找到答案。
结论
那么,Aerospike 是否像他们声称的那样好?就个人而言,我所看到的就是所声称的。我不必扩展到 100 万 TPS,但我相信有足够的硬件是可能的。我也相信显示 Aerospike 和 MongoDB 之间速度差异的数字。Aerospike 是一个比 MongoDB 更“配置”和“计划”的数据库。因此,Aerospike 在规模上将比 MongoDB 快得多。它只需要担心一个(或者在二级索引的情况下,几百个)索引,这与 MongoDB 不同,它可以动态更改。你真正需要问的问题是你试图用你的数据库完成什么。然后查看哪个数据库最适合您的需求。如果您需要可扩展、快速、
如果您有任何具体问题或需要任何澄清,请告诉我。我应该可以帮助你。
速度
Aerospike 更快。几乎所有系统都可以在低负载或简单数据访问的情况下快速运行,但 Aerospike 通过优化内存和基于 SSD 的存储选项,始终保持快速。Mongo 在使用大量 RAM 进行缓存时速度很快,但在其他方面速度很慢并且写入性能低。
可靠性
Aerospike 非常稳定,尽管数据访问更简单。MongoDB 历来在持久化数据和故障转移方面存在问题,但现在要好得多。因为 Aerospike 具有更好的性能和更易于管理,所以它在扩展时导致的潜在问题更少。
设置/配置
使用 Aerospike 的集群更容易设置,因为所有节点都是相同的,并且客户端驱动程序会自动处理连接和故障转移。如果您设置单个服务器,MongoDB 会更容易,因为它本机在更多平台上运行,您无需任何配置即可启动它。
MongoDB 有两种主要的集群方式,副本集(用于可用性)和分片(用于可扩展性)。我们有 5 个分片,每个分片有 3 个服务器的副本集。那是 15 台服务器来保存数据。然后我们有 3 个配置服务器来维护集群配置,并且在我们第一次重大中断后必须添加 2 个仲裁进程,以处理正确地将从属升级到主控。这是很多移动的部分,也使得将来改变你的布局变得非常困难。
相比之下,Aerospike 的工作量要少得多,但需要更多的配置,一旦集群启动,大部分配置就无法更改,而使用 MongoDB,您可以随时创建和更改数据库。
Aerospike 确实具有同步多个集群的能力(设置起来很复杂),因此您可以拥有不同的活动数据中心来复制数据并接受写入,这是 MongoDB 根本不支持的。
数据访问
MongoDB 有数据库/集合/文档,其中每个文档只是 json。Aerospike 有命名空间/设置/记录,其中每条记录都是键值“箱”的集合,然后可以具有嵌套的键/值结构。命名空间是预先配置的并且不是动态的,并且属性的名称限制为 14 个字符,使用起来很烦人。
两者都有二级索引,尽管 MongoDB 允许您立即查询任何内容,而 Aerospike 需要索引设置或自定义脚本。两者都有内置的聚合框架。Aerospike 客户端支持 LUA 脚本,但 MongoDB 支持 map-reduce 和自定义 javascript 函数。
这实际上取决于您的应用程序需要什么,但 MongoDB 在灵活性、更轻松的查询和更少的限制方面胜出。
成本
两者现在都是开源和免费的。两者都有具有额外功能的企业版本,但如果您有大量数据,许可费用会很高。Aerospike 可能更便宜,因为它需要更少的机器来获得相同的性能。
全面的
对于大多数情况,我会推荐 Aerospike。MongoDB 的文档存储语义和灵活性非常好,但是将其作为分布式数据库进行扩展和维护是很痛苦的。Aerospike 快速且可靠,可以使用更易于扩展的更少节点运行。
2016 年 1 月: MongoDB 发布了MongoDB Cloud Manager,这是一项付费 SaaS 服务,可以配置和管理您的集群。这解决了配置Mongo的很多麻烦。
2017 年 3 月:这两个数据库都取得了长足的进步。Aerospike 现在具有更快的复制速度和更灵活的配置设置,而无需重新启动整个集群。MongoDB 具有新的模式实施、更好的性能,甚至支持连接以及MongoDB Atlas托管服务,以消除所有扩展问题。
我现在强烈推荐ScyllaDB,它是一个兼容 Cassandra 的开源数据库,具有令人难以置信的性能、多数据中心复制,并且没有使用限制。
我在我们的生产系统中使用了 MongoDB(2.4) 和 Aerospike 3。这些是我们团队发现的少数观察结果:-
1) Aerospike 的读/写吞吐量是无与伦比的。如果读取请求位于较高端,通常 Mongo db 可以达到一定的规模。如果您需要 95/5% 的并发读/写比率,Mongo 会像任何东西一样降级。使用 Aerospike,即使该比率为 90/10,我们也几乎没有看到影响。在 AWS 上,我们使用 Aerospike 实现了 200k TPS。
2)在 Aerospike 中延迟非常低。服务器端 99% 的读取延迟为亚毫秒。80% 的写入延迟为亚毫秒,100% 的写入延迟在 8ms 以内。最好的事情是我们在不同的 POC 中得到了几乎相似的数字,所以性能一致。
3)与其他解决方案相比,Aerospike 集群中的节点很少。基于 SSD 的数据存储也提供了令人印象深刻的数字,因此非常具有成本效益且维护开销很小。
4) 现在 Aerospike 是开源的,所以希望得到更广泛的社区支持 :-)
因此,我们将 Aerospike 用于所有新系统并尝试从 MongoDB 迁移。
MongoDB 和 Aerospike 不是针对相同的数据管理完成的,因为 SQL 也没有死。
我们在 Mongodb 上使用 TokuMX 版本(基于 Mongodb 2.4.10 的 2.0.0)完成了带有分片集群的缓存系统,系统仍然运行良好,只有 0.1% 的查询在每天 6500 万次查询中耗时超过 100 毫秒,大约每天 1000 万次更新。我们现在正在尝试 Aerospike,它看起来很棒并且现在是开源的。这个开源版本只有一个问题,
不要在生产服务器中使用它!
安全管理仅在 Enterprise 发行版中可用。代表着
你不能用密码和用户保护任何东西!
现在,如果您不介意,您可以在生产中使用它,但不要记得您的任何客户都可以要求进行安全审计,然后您将不得不付出很多。