有没有人和Aerospike合作过?它与MongoDB相比如何?

时间:2014-08-08 17:23:37

标签: mongodb nosql aerospike

有人可以说Aerospike是否和他们声称的一样好吗?我有点怀疑,因为它是一个商业企业。据我了解,他们刚刚发布了一个开源版本,但他们网站上的声明可能仍然被夸大了。

我对Aerospike与MongoDB的比较特别感兴趣。

4 个答案:

答案 0 :(得分:93)

我使用过Aerospike,MongoDB和Redis,并测试了许多其他NoSQL数据库。我会说Aerospike非常擅长它的功能,但它与MongoDB不同。一切都取决于您计划使用数据库的目的。我可以举例说明我使用不同的数据库。我也可以回顾它们之间的差异,并讨论Aerospike的好处。

<强> MongoDB的

我使用MongoDB作为SQL替代方案。在我的MongoDB数据库中,我有许多不同的领域。通常情况下字段会发生变化,我会随机查询各个字段。它是一个非常非结构化的数据库,而且MongoDB非常棒。我还使用MongoDB作为标准键值存储。它运行良好,但我已经让MongoDB在事务规模和数据库大小规模上都表现不佳。不可否认,数据库可能已经进行了一些优化,但我发现很难找到有关在不同情况下正确配置MongoDB的文档。

<强> Redis的

Redis是一个纯粹的键值存储。 Redis的&#39;最大的问题是它纯粹是在内存中(它将使用磁盘作为备份但是你不能存储比你有可用内存更多的信息)。它的使用速度非常快。我个人将它用于一个小型事务数据库:我在键上执行非常简单的功能,比如计算某个用户发生事件的次数。我也做了快速的内存查找,我需要映射到不同的值。 Redis是一个很好的小数据集工具,速度非常快。配置也很容易。

<强>塞式

我个人使用Aerospike取代Redis时需要扩展。根据我的理解,它可以用于更多。与Redis一样,Aerospike也是一家超值商店。我相信开源版本也支持Redis没有的二级索引(我没有在生产中使用二级索引,但对它们进行的测试很少)。

Aerospike的最佳特点是其扩展能力。在研究Aerospike时我需要解决的最大问题是扩展我的系统以处理大型数据集,同时保持极快的速度。我使用Aerospike的项目对速度有非常严格的要求。我通常会进行3-4次数据库查找以及其他处理,并且需要具有低于50ms的事务时间。对数据集进行了一些查看,这些数据集为300GB +。我找不到一个解决方案来保存这些数据,并在合理的时间内访问它。 Redis显然不会工作,除非我有一台拥有300GB + RAM的机器。 MongoDB开始表现得非常糟糕,大小远低于300GB。所以我给了Aerospike一个机会,它能够很好地处理所有事情。关于Aerospike的最好的事情:随着我的数据集的增长,我不需要做更多的事情,只需在需要时站起来一个新的盒子。速度保持一致。

我也发现Aerospikes文档非常好。配置起来并不难,找到任何问题的答案都很容易找到答案。

<强>结论

那么,Aerospike是否和他们声称的一样好?就个人而言,我已经看到了所声称的东西。我没有必要扩展到100万TPS,但我相信有足够的硬件是可能的。我也相信这些数据显示了Aerospike和MongoDB之间的速度差异。 Aerospike是一个更加配置的#34;和&#34;计划出来&#34;数据库比MongoDB。因此,Aerospike的规模将比MongoDB快得多。它只需要担心单个(或在二级索引,几百个)的索引,不像MongoDB可以动态改变。您真正需要问的问题是您要使用数据库完成的任务。然后查看最适合您需求的数据库。如果您需要一个可扩展的,快速的键值存储数据库,我会说Aerospike可能是最好的。

如果您有任何具体问题或需要澄清任何问题,请与我们联系。我可能会帮助你。

答案 1 :(得分:49)

<强>速度

Aerospike更快。几乎所有系统都可以快速实现低负载或简单的数据访问,但Aerospike通过优化内存和基于SSD的存储选项,始终保持一致。当使用大量RAM进行缓存时,Mongo速度很快,但速度慢且写入性能低。

<强>可靠性

虽然数据访问更简单,但Aerospike非常稳定。 MongoDB历来存在持久数据和故障转移的问题,但现在好多了。由于Aerospike具有更好的性能和更易于管理,因此在扩展时可以减少潜在的问题。

<强>设置/配置

使用Aerospike进行群集更容易设置,因为所有节点都相同,并且客户端驱动程序自动处理连接和故障转移。如果您设置单个服务器,MongoDB可以更容易,因为它本地运行在更多平台上,您可以在没有任何配置的情况下启动它。

MongoDB有两种主要的聚类方式,副本集(用于可用性)和分片(用于可伸缩性)。我们有5个分片,每个分片都有3个服务器的副本集。这是15台用于保存数据的服务器。然后我们有3个配置服务器维护集群配置,并且在我们第一次重大中断之后必须添加2个仲裁进程来处理正确地将从服务器升级为主服务器。这是很多移动的部分,并且在将来改变你的布局也非常困难。

相比之下,Aerospike花费的精力要少得多,但需要更多配置,一旦群集启动就无法更改,而使用MongoDB,您可以随时创建和更改数据库。

Aerospike确实能够同步多个集群(设置很复杂),因此您可以让不同的活动数据中心复制数据并接受写入,这是MongoDB根本不支持的。

数据访问

MongoDB有数据库/集合/文档,每个文档只是json。 Aerospike具有命名空间/设置/记录,其中每个记录是键值“箱”的集合,其可以具有嵌套的键/值结构。命名空间是预配置的,不是动态的,属性的名称限制为14个字符,这很烦人。

两者都有二级索引,但是当Aerospike需要索引设置或自定义脚本时,MongoDB允许您立即查询任何内容。两者都有内置的聚合框架。 Aerospike客户端支持LUA脚本,但MongoDB支持map-reduce和自定义javascript函数。

这实际上取决于您的应用程序需求,但MongoDB在灵活性,更容易查询和更少限制方面获胜。

<强>费用

现在两者都是开源和免费的。两者都具有具有额外功能的企业版本,但如果您拥有大量数据,则许可费用很高。 Aerospike可能更便宜,因为它需要更少的机器以获得相同的性能。

<强>总体

对于大多数情况,我会推荐Aerospike。 MongoDB的文档存储语义和灵活性很棒但是将其作为分布式数据库进行扩展和维护是很痛苦的。 Aerospike快速可靠,可以使用更容易扩展的节点运行。


2014年10月: Aerospike现在为合格的创业公司提供特殊计划,以便免费访问企业版。

2016年1月: MongoDB发布了MongoDB Cloud Manager,这是一种付费SaaS服务,可以配置和管理您的群集。这解决了配置Mongo的许多麻烦。

2017年3月:两个数据库都有很长的路要走。 Aerospike现在具有更快的复制和更灵活的配置设置,无需重新启动整个群集。 MongoDB具有新的架构实施,更好的性能,甚至还支持联接以及MongoDB Atlas托管服务,以消除所有扩展问题。


我现在强烈推荐ScyllaDB这是一个与Cassandra兼容的开源数据库,具有令人难以置信的性能,多数据中心复制,并且没有使用限制。

答案 2 :(得分:19)

我在生产系统中使用了MongoDB(2.4)和Aerospike 3。这些是我们团队发现的少数观察结果: -

1) Aerospike的读/写吞吐量是无与伦比的。如果读取请求位于较高端,Mongo数据库通常可以达到一定的比例。如果你需要并发读/写为95/5%的比例,Mongo会像任何东西一样降级。使用Aerospike,即使这个比例是90/10,我们也看不到什么影响。在AWS上,我们使用Aerospike实现了200k TPS。

2)在Aerospike潜伏期非常低。服务器端的99百分位读取延迟为亚毫秒。 80百分位的写入延迟为亚毫秒,100百分位的写入延迟为8毫秒。 最好的是我们在不同的POC中获得了几乎相同的数字,因此性能一致。

3)与其他解决方案相比,Aerospike集群中的节点数量非常少。基于SSD的数据存储也提供了相当令人印象深刻的数字,因此非常具有成本效益且维护开销很小。

4)现在Aerospike是开源的,所以希望得到更广泛的社区支持:-)

因此我们将Aerospike用于所有新系统并尝试从MongoDB迁移。

答案 3 :(得分:-2)

对于相同的数据管理,MongoDB和Aerospike并没有完成,因为SQL也没有死。

我们在Mongodb上使用TokuMX版本(基于Mongodb 2.4.10的2.0.0)完成了具有分片群集的缓存系统,系统仍然运行良好,只有0.1%的查询在每个6500万个查询上花费超过100毫秒每天和每天大约1000万次更新。 我们现在正在尝试Aerospike,它似乎是伟大的,现在是开源的。 这个开源版本只有一个问题,

请勿在生产服务器中使用它!

安全管理仅适用于Enterprise分发。这意味着

您无法通过密码和用户保护任何内容!

现在,如果您不介意,可以在生产中使用它,但不记得您的任何客户可以要求进行安全审核,那么您将需要付出很多。