下面PPT和视频的作者是MongoDB的开发工程师Jared Rosoff,他从下面几个方面对MongoDB的几个优化点进行了讲解和描述。这些优化实际上也适用于很多其它的数据库。 1.查询优化 确认你的查询是否充分利用到了索引,用explain命令查看一下查询执行的情况,添加必要的索引,避免扫表操作。 2.搞清你的热数据大小 可能你的数据集非常大,但是这并不那么重要,重要的是你的热数据集有多大,你经常访问的数据有多大(包括经常访问的数据和所有索引数据)。使用MongoDB,你最好保证你的热数据在你机器的内存大小之下,保证内存能容纳所有热数据。
Browsing the archives for the MongoDB tag
PHP代码: function get_autoincre_id($name, $db){ $update = array('$inc'=>array("id"=>1)); $query = array('table_name' => $name); $command = array( 'findandmodify'=>'autoincre_system', 'update'=>$update, 'query'=>$query, 'new'=>true, 'upsert'=>true ); $id = $db->command($command); return $id['value']['id']; } 其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值. $conn = new Mongo(); $db = $conn->cms; news_max_id = get_autoincre_id('tbl_news'); //从1开始 soft_max_id = get_autoincre_id('tbl_soft'); //从1开始 现在就可以直接在写入新记录的时候使用这个id值了. 其具体实现方式主要是利用MongoDB中findAndModify命令,
前段时间有个朋友问我,分布式主键生成策略在我们这边是怎么实现的,当时我给的答案是sequence,当然这在不高并发的情况下是没有任何问题,实际上,我们的主键生成是可控的,但如果是在分布式高并发的情况下,那肯定是有问题的。 突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。 下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个"_id"建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。 当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key > db.t_test.insert({"name":"cyz"}) > db.t_test.findOne({"name":"cyz"}) { "_id" : ObjectId("4df2dcec2cdcd20936a8b817"), "name" : "cyz" } 可以发现这里多出一个Objectid类型的_id,当然了,这个_id是系统默认生成的,你也可以为其指定一个值,不过在同一collections中该值必须是唯一的
redis 1.无法发挥多处理器的作用,只能用一个cpu来处理 2.暂时没有windows下的php客户端 dll或者so文件. mongodb 1.在32位处理器下,文件总大小不能超过2G,而对于64位的处理器则无任何限制
* MongoDB vs Redis vs Tokyo Tyrant 准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较: * 内存文件映像(Memory-File Mapping) Redis, MongoDB * 文件 + Cache Tokyo Tyrant * 内存: Redis, Tokyo Tyrant Key/Value索引形式: * B+ Tree : MongoDB, Tokyo Tyrant * Hash Table: Redis, Tokyo Tyrant * Fixed Length: Tokyo Tyrant 从上面的比较可以看出,Redis和MongoDB是基于系统内存映像文件,数据能命中在内存的时候读写操作性能应该是非常强的,当然,反过来,如果数据十分分散不能在内存命中,那么内存页的切换开销将是非常可怕的,MongoDB和Redis数据文件不同的是将数据存放在多个文件中,每当上一个存满的时候就会创建新的数据空间文件。鉴于MongoDB 是主要比较对象,而其采用B+Tree进行存储,故TT也使用B+Tree引擎进行比较。
Mongo资料分享.ppt 认识MongoDB.ppt MongoDB技术交流.ppt SQL-to-MongoDB.pdf QCon北京2011大会之:MongoDB开发应用实践 NoSQL应用场景及Cassandra架构分析 Windows下MongoDB管理工具(启用和服务) mongoDB 入门指南、示例 NoSQl存储模型 Mongo与Mysql语法对应关系图 数据库 表 行 写入 查询 MongoDb database Collection Document insert into blog.users values(“user1”,”23))=========== > use blogswitched to db blog> u = { name:"user1", age:23 } > db.users.insert(u) 主要用到的查询函数式 find() 和 findOne(),前者返回一个迭代器 cursor,后者返回单个文档。 > db.users.find({name:"user1"}){ "_id" : ObjectId("4c4528a0b55f2224d447e4b0"), "name" : "user1", "age" : 21, [...]
这里用的是64位版本.使用时请检查相应操作系统的版本是32位还是64位. 1>设置mongoDB目录 cd /home/apps mkdir /home/apps 2>下载mongodb wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.3.tgz 3>解压缩文件 tar xzf mongodb-linux-x86_64-1.6.3.tgz 4>启动服务 ./mongodb-linux-x86_64-1.6.3/bin/mongod -dbpath=/data/mongodb/db -logpath=/data/mongodb/log
MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。 对科班出生的程序员来说,最好的例子莫过于归并排序的例子,没错,归并排序流程就可以看作是一个MapReduce,只是我们在学校写过的归并排序程序可能还没有涉及到并行计算罢了。 上面是MapReduce的理论部分,下面说实际的应用,下面以MongoDB MapReduce为例说明。 下面是MongoDB官方的一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( [...]
本文见于MongoDB官方网站,MongoDB与CouchDB 很相似,他们都是文档型存储,数据存储格式都是JSON型的,都使用Javascript进行操作,都支持Map/Reduce。但是其实二者有着很多本质的区别,本文透过现象追寻本质,让你更好的理解MongoDB 与CouchDB。nosqlfan 翻译如下: 原文链接:Comparing Mongo DB and Couch DB 1.MVCC(Multiversion concurrency control) MongoDB 与 CouchDB 的一大区别就是CouchDB 是一个MVCC的系统,而MongoDB是一个update-in-place 的系统。这二者的区别就是,MongoDB 进行写操作时都是即时完成写操作,写操作成功则数据就写成功了,而CouchDB 一个支持多版本控制的系统,此类系统通常支持多个结点写,而系统会检测到多个系统的写操作之间的冲突并以一定的算法规则予以解决。 2.水平扩展性 在扩展性方面,CouchDB 使用replication 去做,而MongoDB 的replication 仅仅用来增强数据的可靠性,MongoDB 在实现水平扩展性方面使用的是Sharding。(据说CouchDB 也有开发分片功能的计划)
一、安装服务端 1.下载MongoDB http://www.mongodb.org/downloads 我下载的是1.6的版本 2.解压并把解压包bin目录中的文件全部移到/usr/local/bin目录下面 3.运行mongo的服务器端程序 /usr/local/bin/mongod --port <端口> --bind_ip <本机IP> --dbpath <数据库文件存放的位置> 如果要求开机就启动就在 /usr/local/etc/rc.local中加入下面一行内容 usr/local/bin/mongod --port <端口> --bind_ip <本机IP> --dbpath <数据库文件存放的位置> >/dev/null & 4.测试安装是否成功 运行指令 #/usr/local/bin/mongo --port 4312 --host 127.0.0.1 显示 MongoDB shell version: 1.6.0 connecting to: 127.0.0.1:4312/test