Riak与MongoDB的对比

标签: MongoDB 10gen auto-sharding basho bson | 发表时间:2011-08-06 00:01 | 作者:nosqlfan gOODiDEA
出处:http://blog.nosqlfan.com

本文来自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的机制保证写入操作安全性的。

复制备份及横向扩展

Riak主要通过一致性hash算法来实现其数据的复制及分片,一致性hash机制是Riak的核心思想之一。在Riak中,每个节点都是对等的,所以其不存在单点故障。

而MongoDB在1.6版本后也推出了强有力的复制备份功能

1.主从复制

2.Replica Sets

Replica Sets是MongoDB的重头功能之一,它让几个节点组成一个集合,在这个集合中的节点中有一个主机提供写入,其它节点会从主机上备份数据,主机故障后会自动在从机中选取产生新的主机。

而在数据分片上,MongoDB提供了一种叫auto-sharding的机制,使数据在多个节点间可以均匀分布,提供动态添加删除节点的功能。

数据分片的自动调整

Riak基于一致性hash策略,在有节点从hash环上移除后,其数据会自动分摊整个环上的其它节点上。其负载也就被均匀分摊了。而MongoDB也支持在Sharding中摘除节点后的自动数据迁移,具体见此文:

性能对比

Riak的存储引擎本身是作为插件的形式挂载的,Riak支持BitCask,InnoDB和LevelDB等存储引擎,使用默认的BitCask引擎,你可以在性能和数据持久化的选择上进行调节。相比之下,MongoDB由于采用了mmap机制,如果索引和热数据能被内存完全装下,那么其操作基本上相当于内存操作,所以MongoDB的当机性能是相当高的。

数据模型

Riak的数据存储没有特定的格式需求,它允许你存储不同体积的文档型数据,另外Riak还可以在数据间创建link来为数据建立关联。

MongoDB的数据是以BSON格式存储的,你可以在MongoDB中存储任意JSON格式的文档,在存储时会被转成BSON进行存储,另外二进制数据也可以转换成相应的一种BSON数据类型进行存储,GridFS正是基于这种类型来实现的。

查询语句及分布式操作

Riak只提供key-value式的数据操作接口,它支持key-value数据的各种操作,也支持link-walking和MapReduce操作,像二级索引这种东西,在Riak里是不存在的,因为Riak根本不关心它存的数据是什么样的,value对它来说只是一串数据。

MongoDB提供与关系型数据库类似的各种数据操作(除了关联查询),其索引机制更是与关系型数据库几乎一模一样。同时MongoDB也提供MapReduce的操作接口,用以处理一些批量任务。

冲突解决策略

Riak使用vector-clock机制来进行冲突检测,所以其冲突解决的选择权是留给应用层来做的。应用层可以决定两个用户对同一行数据的更新哪一个会胜出。

MongoDB使用的是最近更新者胜出的方式,相对来说更简单直接。

API

Riak提供给非Erlang的客户端两种操作方式

MongoDB的协议是自己制定的一套特有协议,其客户端由其所属的10gen公司开发并维护,基本主流的语言都有相应的官方客户端。

最后,七夕看这篇文章的都是尼玛折翼的梁山好汉,各位七夕快乐。

技术传播,需要你我共同努力!    

相关文章:

MongoDB vs Cassandra

Warning:MongoDB Replica Sets配置注意事项

Cassandra、MongoDB、CouchDB、Redis、Riak、HBase比较

Foursquare:使用MongoDB Replica Sets的三种架构

Mongodb Mapreduce 初窥
无觅

相关 [riak mongodb] 推荐:

Riak与MongoDB的对比

- gOODiDEA - NoSQLFan
本文来自Riak所属的Basho公司的技术WiKi,文章从几个方面对Riak和MongoDB进行了对比,这不是一篇PK文章,NoSQLFan翻译给大家,希望本文能让您对Riak和MongoDB有更多的了解. 来源地址:wiki.basho.com. Riak和MongoDB在使用特性上有下面几个相同点:.

[转][转]Cassandra、MongoDB、CouchDB、Redis、Riak、HBase比较

- - heiyeluren的blog(黑夜路人的开源世界)
来源: http://blog.nosqlfan.com/html/1845.html. 在NoSQL如日中天的今天,各种NoSQL产品可谓百花齐放,但每一个产品都有自己的特点,有长处也有不适合的场景. 本文对 Cassandra,  Mongodb,  CouchDB,  Redis,  Riak 以及  HBase 进行了多方面的特点分析,希望看完此文的您能够对这些NoSQL产品的特性有所了解.

NOSQL数据库大比拼:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase

- - 博客园_Ruby's Louvre
话说,尽管 SQL 数据库一直是我们IT行业中最有用的工具,然而,它们这样在行业中超过15年以上的“转正”终于就要寿终正寝了. 现在,虽然关系型数据库仍然无所不在,但它越来越不能满足我们的需要了. 但是,各种 "NoSQL" 数据库之间的差异比当年众多关系型数据库之间的差异要大许多. 这就加大了人们在建设自己的应用是选择合适的数据库的难度.

Riak对比HBase

- - NoSQLFan
文章来自 Riak官方wiki,是一篇Riak与HBase的对比文章. Riak官方的对比通常都做得很中肯,并不刻意偏向自家产品. 对比的Riak版本是1.1.x,HBase是0.94.x. Riak 与 HBase 都是基于 Apache 2.0 licensed 发布. Riak 的实现是基于 Amazon 的 Dynamo 论文,HBase 是基于 Google 的 BigTable.

riak 1.0.2安装手记

- - 五四陈科学院-坚信科学,分享技术
以下内容由 [五四陈科学院]提供. git环境(看上去是非必须的):. 与0.1.42相比:. erlang环境要求R14B03及以上. 低版本会出现this emulator supports only up to 149的make错误. 使用leveldb为存储引擎:. 默认引擎还是bitcask,需要修改配置文件app.config.

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.

【MongoDB】MongoDB之优化器Profiler

- - CSDN博客数据库推荐文章
在mysql数据库中,慢查询日志经常作为优化数据库的依据, mongodb中依然有类似的功能. Mongodb自带的profiler,可以方便地记录所有耗时的操作,以便于调优;. 一、开始profiler功能. 开启profier功能有两种:. 第一种就是直接在启动参数里面进行设置,就在茄冬mongodb时候添加-profile=级别.

夜说mongodb

- Lianhui Wang - NoSQLFan
前两天本站刚刚分享了wordnik使用MongoDB经验的文章:《Wordnik 的 MongoDB 使用经历》,今天又看到一位朋友对这方面做的总结,分享在这里,供大家参考. 赋闲以后很长没有更新博客了,说忙完全是借口,多半因为没有兴致所致. 今天凌晨比赛多多,趁着比赛的前奏和间隙,遂浏览些技术文章.

MongoDB与内存

- 高春辉 - 火丁笔记
但凡初次接触MongoDB的人,无不惊讶于它对内存的贪得无厌,至于个中缘由,我先讲讲Linux是如何管理内存的,再说说MongoDB是如何使用内存的,答案自然就清楚了. 据说带着问题学习更有效,那就先看一个MongoDB服务器的top命令结果:. 这台MongoDB服务器有没有性能问题. 先讲讲Linux是如何管理内存的.