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