[转]Riak与MongoDB的对比
来源:互联网 发布:笔记本刷mac os 编辑:程序博客网 时间:2024/05/29 09:55
本文来自Riak所属的Basho公司的技术WiKi,文章从几个方面对Riak和MongoDB进行了对比,这不是一篇PK文章,NoSQLFan翻译给大家,希望本文能让您对Riak和MongoDB有更多的了解。
来源地址:wiki.basho.com
机制与概念上的异同Riak和MongoDB在使用特性上有下面几个相同点:
- 都是文档型的数据模型
- 具体存储方式都不是以文档型进行存储
- 写性能及写吞吐都很高
虽然上面几点看起来二者挺像,但在内部实现上两者却是相去甚远。比如Riak是一个分布式的存储,而MongoDB可以理解为是一个单一的数据库系统,同时加上了Replication和Sharding功能。MongoDB的内部数据结构上还是文档,而Riak是不用关心存储内容的二进制。MongoDB提供GridFS机制来存储二进制内容,而Riak的二进制内容与普通内容存储方式一样。MongoDB的写入方式是 in-place方式,修改一个文档是原子性的,而Riak是通过quormNRW的机制保证写入操作安全性的。
- http://www.mongodb.org/display/DOCS/Home
- http://blog.mongodb.org/post/248614779/fast-updates-with-mongodb-update-in-place
- http://www.mongodb.org/display/DOCS/Updating#Updating-Update
Riak主要通过一致性hash算法来实现其数据的复制及分片,一致性hash机制是Riak的核心思想之一。在Riak中,每个节点都是对等的,所以其不存在单点故障。
- Add Nodes to Riak
- Consistent Hashing
而MongoDB在1.6版本后也推出了强有力的复制备份功能
1.主从复制- http://www.mongodb.org/display/DOCS/Master+Slave
Replica Sets是MongoDB的重头功能之一,它让几个节点组成一个集合,在这个集合中的节点中有一个主机提供写入,其它节点会从主机上备份数据,主机故障后会自动在从机中选取产生新的主机。
- http://www.mongodb.org/display/DOCS/Replica+Sets
而在数据分片上,MongoDB提供了一种叫auto-sharding的机制,使数据在多个节点间可以均匀分布,提供动态添加删除节点的功能。
- http://www.mongodb.org/display/DOCS/Sharding
- http://www.mongodb.org/display/DOCS/Sharding+Introduction
- http://en.wikipedia.org/wiki/Sharding
Riak基于一致性hash策略,在有节点从hash环上移除后,其数据会自动分摊整个环上的其它节点上。其负载也就被均匀分摊了。而MongoDB也支持在Sharding中摘除节点后的自动数据迁移,具体见此文:
- http://www.mongodb.org/display/DOCS/Configuring+Sharding#ConfiguringSharding-Removingashard
Riak的存储引擎本身是作为插件的形式挂载的,Riak支持BitCask,InnoDB和LevelDB等存储引擎,使用默认的BitCask引擎,你可以在性能和数据持久化的选择上进行调节。相比之下,MongoDB由于采用了mmap机制,如果索引和热数据能被内存完全装下,那么其操作基本上相当于内存操作,所以MongoDB的当机性能是相当高的。
- http://www.mongodb.org/display/DOCS/Durability+and+Repair
- http://blog.mongodb.org/post/381927266/what-about-durability
Riak的数据存储没有特定的格式需求,它允许你存储不同体积的文档型数据,另外Riak还可以在数据间创建link来为数据建立关联。
- Data Storage in Riak
MongoDB的数据是以BSON格式存储的,你可以在MongoDB中存储任意JSON格式的文档,在存储时会被转成BSON进行存储,另外二进制数据也可以转换成相应的一种BSON数据类型进行存储,GridFS正是基于这种类型来实现的。
查询语句及分布式操作Riak只提供key-value式的数据操作接口,它支持key-value数据的各种操作,也支持link-walking和MapReduce操作,像二级索引这种东西,在Riak里是不存在的,因为Riak根本不关心它存的数据是什么样的,value对它来说只是一串数据。
- https://wiki.basho.com/display/RIAK/MapReduce
MongoDB提供与关系型数据库类似的各种数据操作(除了关联查询),其索引机制更是与关系型数据库几乎一模一样。同时MongoDB也提供MapReduce的操作接口,用以处理一些批量任务。
- http://www.mongodb.org/display/DOCS/Indexes
- http://www.mongodb.org/display/DOCS/Querying
- http://www.mongodb.org/display/DOCS/MapReduce
Riak使用vector-clock机制来进行冲突检测,所以其冲突解决的选择权是留给应用层来做的。应用层可以决定两个用户对同一行数据的更新哪一个会胜出。
- Vector Clocks
MongoDB使用的是最近更新者胜出的方式,相对来说更简单直接。
- http://www.mongodb.org/display/DOCS/Atomic+Operations
Riak提供给非Erlang的客户端两种操作方式
- 1. HTTP
- 2. Protocol Buffers
MongoDB的协议是自己制定的一套特有协议,其客户端由其所属的10gen公司开发并维护,基本主流的语言都有相应的官方客户端。
- http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol
上一篇:企业中的NoSQL
下一篇:企业中的NoSQL
- 策划可行性电子邮件营销方案技...
- 如何高效进行邮件推
- BGP多线单IP技术实现形式以及...
- 本文是在百度“网站运营优化实...
- 应用水玻璃基型砂的十二项技术...
- ABAP文章索引
- 数据库课程设计报告(仓库管理...
- 拼音汉字对照表
- sql isnull函数的使用
- 数据挖掘电子书下载
- LNMP 老是会出现502?
- suse 运用一个shell获取本机和...
- 虚拟机 unix 配置ip
- hp-un 主机新系统读不到磁盘阵...
- mysql出现问题:Starting MySQ...
- [转]Riak与MongoDB的对比
- Riak学习(3):Riak对比HBase(转)
- NoSQL数据库对比-Cassandra,Mongodb,CouchDB,Redis,Riak,HBase
- 对比Cassandra、 Mongodb、CouchDB、Redis、Riak、 Membase、Neo4j、HBase
- MySQL与MongoDB的操作对比
- REDIS与MEMCACHED、mongoDB 的区别 对比
- php MySQL与MongoDB的对比
- MySQL与MongoDB的操作对比
- MySQL与MongoDB的操作对比、区别
- REDIS与MEMCACHED、mongoDB 的区别 对比
- [转]Cassandra、MongoDB、CouchDB、Redis、Riak、HBase比较
- [转]Cassandra、MongoDB、CouchDB、Redis、Riak、HBase比较
- [转]Cassandra、MongoDB、CouchDB、Redis、Riak、HBase比较 .
- MySQL与MongoDB对比
- MySQL与MongoDB对比
- 转 -- Riak的最终一致性实现原理
- NoSQL对比:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j
- MongoDB与CouchDB全方位对比
- [转]NoSQL数据库笔谈
- [转]高负载并发网站架构分析
- [转]高负载并发网站架构分析
- [转]海量数据处理
- [转]企业中的NoSQL
- [转]Riak与MongoDB的对比
- [转]企业中的NoSQL
- [转]SMTP标准协议rfc821中文版
- [转]腾讯微信技术总监周颢:一亿用户增长背后的架构秘密
- 常用垃圾网址 及过滤方法
- WampServer 2.3 有BUG
- [转]PHP 5.4 的新特性
- [转]PHP 5.4 的新特性(另一篇)
- QTP常见问题与特点