写在前面前面一篇对MongoDB的基本操作有了一个大致的了解,这一篇中,详细讲解MangoDB的创建、更新、删除文档。相关阅读:http://www.linuxidc.com/Linux/2012-01/51274.htm 与 http://www.linuxidc.com/Linux/2012-01/51275.htm
1.插入并保存文档插入是MongoDB中的最基本的方法,那往一个集合中插入数据,上一篇已经说过:
[javascript] - Microsoft Windows XP [版本 5.1.2600]
- (C) 版权所有 1985-2001 Microsoft Corp.
- C:Documents and SettingsAdministrator>E:
-
- E:>cd MongoDB
-
- E:MongoDB>mongo.exe
- MongoDB shell version: 2.0.2
- connecting to: test
- > use php //选择php数据库
- switched to db php
- > show collections //查看phps数据库中有哪些集合。
- blog
- system.indexes
- > db.blog.insert({"title":"okokok","content":"123456","time":"2011023023","comments":"23224"}) //选择blog集合。并插入数据。
- > db.blog.find() //查看blog集合下所有的文档,已经插入成功。
- { "_id" : ObjectId("4f0bc1245a5904bae2b767a8"), "title" : "wowowowo", "content"
- : "hahahahah", "time" : ISODate("2012-01-10T03:38:45.515Z") }
- { "_id" : ObjectId("4f0bc11d5a5904bae2b767a7"), "title" : "wowowowo", "content"
- : "hahahahah", "time" : ISODate("2012-01-10T03:38:45.515Z"), "comments" : "hao a
- hao a " }
- { "_id" : ObjectId("4f0cf96bbc8c53013bb90682"), "title" : "okokok", "content" :
- "123456", "time" : "2011023023", "comments" : "23224" }
- >
上面的文档中,有个“_id”, 本来是要第二篇说的,那这一篇就说说。在一个特定集合内部,需要唯一的标识文档。因此MongoDB中存储的文档都由一个"_id"键,用于完成此功能。这个键的值可以是任意类型的,默认试ObjectId对象。ObjectId对象的生成思路是本文的主题,也是很多分布式系统可以借鉴的思路。为了考虑分布式,“_id”要求不同的机器都能用全局唯一的同种方法方便的生成它。因此不能使用自增主键(需要多台服务器进行同步,既费时又费力),因此选用了生成ObjectId对象的方法。ObjectId使用12字节的存储空间,其生成方式如下:|0|1|2|3|4|5|6 |7|8|9|10|11||时间戳 |机器ID|PID|计数器 |前四个字节时间戳是从标准纪元开始的时间戳,单位为秒,有如下特性:
- 时间戳与后边5个字节一块,保证秒级别的唯一性;
- 保证插入顺序大致按时间排序;
- 隐含了文档创建时间;
时间戳的实际值并不重要,不需要对服务器之间的时间进行同步(因为加上机器ID和进程ID已保证此值唯一,唯一性是ObjectId的最终诉求)。机器ID是服务器主机标识,通常是机器主机名的散列值。同一台机器上可以运行多个mongod实例,因此也需要加入进程标识符PID。前9个字节保证了同一秒钟不同机器不同进程产生的ObjectId的唯一性。后三个字节是一个自动增加的计数器(一个mongod进程需要一个全局的计数器),保证同一秒的ObjectId是唯一的。同一秒钟最多允许每个进程拥有(256^3 = 16777216)个不同的ObjectId。总结一下:时间戳保证秒级唯一,机器ID保证设计时考虑分布式,避免时钟同步,PID保证同一台服务器运行多个mongod实例时的唯一性,最后的计数器保证同一秒内的唯一性(选用几个字节既要考虑存储的经济性,也要考虑并发性能的上限)。"_id"既可以在服务器端生成也可以在客户端生成,在客户端生成可以降低服务器端的压力。MongoDB初略了解Oracle ORA-12154: TNS:could not resolve service name 解决办法相关资讯 MangoDB
- 30 行代码的 MangoDB 比 MongoDB (06/21/2012 08:22:50)
本文评论 查看全部评论 (0)