最近在学习riak,搜索了一些文章, 尽管比较老了, 但是还是保存下来, 学习一下
原文地址:http://blog.nosqlfan.com/html/2705.html
本文来自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
2.Replica Sets
Replica
…
阅读全文
Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩放性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。
Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynamo (分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型)。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0
网站地址:http://cassandra.apache.org/
以下资料来源:http://asyty.iteye.com/blog/1202072
一、Cassandra框架
图1 Cassandra
Cassandra是社交网络理想的数据库,适合于实时事务处理和提供交互型数据。以Amazon的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,P2P去中心化的存储,目前twitter和digg中都有使用。
在CAP特性上,HBase选择了CP,Cassandra更倾向于AP,而在一致性上有所减弱。
Cassandra的类Dynamo特性有以下几点:
l 对称的,P2P架构
n 无特殊节点,无单点故障
l 基于Gossip的分布式管理
l 通过分布式hash表放置数据
n 可插拔的分区
n 可插拔的拓扑发现
n 可配置的放置策略
l 可配置的,最终一致性
类BigTable特性:
l
…
阅读全文
来源:互联网
<?php
error_reporting(7);
$conn = new Mongo();
$db = $conn->PHPDataBase;
$collection = $db->PHPCollection;
/*—————————–
* 删除
*—————————–
$collection->remove(array(“name” => “xixi111″));
*/
/*——————————
* 插入
*——————————
for($i = 0;$i <= 50;$i++) {
$data = array(“name” => “xixi”.$i,”email” => “673048143_”.$i.”@qq.com”,”age” => $i*1+20);… 阅读全文
来源:互联网
相关文章:
MongoDB基本操作指南
NoSQL数据库
MongoDB集群
MongoDB数据库
MongoDB备份与恢复
8种NoSQL数据库对比
配置mongodb分片群集(sharding cluster)
记一次MongoDB性能问题,附原理解析
mongodb之insert和save函数的区别
mongodb shell无法删除问题 与 secureCRT使用退格键出现^H解决办法
Mongodb源码分析之Mongos分析
PHP操作MongoDB
虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。NoSQL: 是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而 NoSQL致力于改变这一现状。目前Google的BigTable和Amazon的Dynamo使用的就是NoSQL型数据库。参见NoSQL词条。

但是NoSQL数据库之间的不同,远超过两SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的NoSQL数据库。针对这种情况,这里对Cassandra、Mongodb、CouchDB、Redis、Riak、Membase、Neo4j和HBase进行了比较:
1.CouchDB
- 所用语言:Erlang
- 特点:DB一致性,易于使用
- 使用许可:Apache
- 协议:HTTP/REST
- 双向数据复制,
- 持续进行或临时处理,
- 处理时带冲突检查,
- 因此,采用的是master-master复制(master-master复制:是一种数据库同步方法,允许数据在一组计算机之间共享数据,并且可以通过小组中任意成员在组内进行数据更新。)
- MVCC-写操作不阻塞读操作
- 可保存文件之前的版本
- Crash-only(可靠的)设计
- 需要不时地进行数据压缩
- 视图:嵌入式映射/减少
- 格式化视图:列表显示
- 支持进行服务器端文档验证
- 支持认证
…
阅读全文
MongoDB提供了auto-sharding 功能。因为其是auto-sharding,即mongodb通过mongos(一个自动分片模块,用于构建一个大规模的可扩展的数据库集群,这个集群可 以并入动态增加的机器)自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。
MongoDB提供了auto-sharding 功能。因为其是auto-sharding,即mongodb通过mongos(一个自动分片模块,用于构建一个大规模的可扩展的数据库集群,这个集群可 以并入动态增加的机器)自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。
一个mongodb集群包括一些shards(包括一些mongod进程),mongos路由进程,一个或多个config服务器
下面是一些相关词汇说明:
Shards :每一个shard包括一个或多个服务和存储数据的mongod进程(mongod是MongoDB数据的核心进程)典型的每个shard开启多个服务来提高服务的可用性。这些服务/mongod进程在shard中组成一个复制集
Chunks:Chunk是一个来自特殊集合中的一个数据范围, (collection,minKey,maxKey)描叙一个chunk,它介于minKey和maxKey范围之间。例如chunks 的maxsize大小是100M,如果一个文件达到或超过这个范围时,会被切分到2个新的chunks中。当一个shard的数据过量时,chunks将 会被迁移到其他的shards上。同样,chunks也可以迁移到其他的shards上
Config Servers : Config服务器存储着集群的metadata信息,包括每个服务器,每个shard的基本信息和chunk信息Config服务器主要存储的是chunk信息。每一个config服务器都复制了完整的chunk信息。
今天要介绍的源码主要是Mongos的主入口函数的执行流程,首先我们打开Mongos的项目(可通过打开源码db\db_10.sln加载所有项目),如下图:
![wps_clip_image-17594[3][1] wps_clip_image-17594[3][1]](http://www.iigrowing.cn/wp-content/uploads/MongodbMongos_F85B/wps_clip_image1759431.jpg)
注:如果要调试mongos,需要设置一个mongod进程和一个Config Server,形如:
d:\mongodb>bin>mongod –dbpath d:\mongodb\db\ –port 27012
d:\mongodb>bin>mongod –configsvr –dbpath d:\mongodb\db\ –port 27022
然后在vs2010中配置相应的boost路径信息及启动参数信息,如下图:
![wps_clip_image-27122[4][1] wps_clip_image-27122[4][1]](http://www.iigrowing.cn/wp-content/uploads/MongodbMongos_F85B/wps_clip_image2712241.jpg)
![wps_clip_image-5075[4][1] wps_clip_image-5075[4][1]](http://www.iigrowing.cn/wp-content/uploads/MongodbMongos_F85B/wps_clip_image507541.jpg)
![wps_clip_image-18371[4][1] wps_clip_image-18371[4][1]](http://www.iigrowing.cn/wp-content/uploads/MongodbMongos_F85B/wps_clip_image1837141.jpg)
下面开始正文。首先打开mongos项目中的server.cpp文件,找到下面方法:
int main(int argc, char* argv[]) {… 阅读全文