- 1、本文档共45页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MongoDB由浅入深.ppt
MongoDB部署架构 Sharding服务角色介绍 路由节在写数据时,还会判断当前chunk是否超出限定大小,如果是就将其分裂成两个chunk。 对于按分片key进行的数据查询,路由节点会查到具体数据存储位置,然后再进行相关的工作。 对于不按分片key进行的数据查询,路由节点会把操作发给所有分片,然后再对返回结果进行合并、排序等。 * MongoDB内部数据结构 在文件系统中的存储形式 MongoDB会给每个数据库预分配大小逐渐增长的文件集。 文件集序号依次为0,1,2...,大小依次是64M,128M,256M,512M,1G,2G,然后就一直是2G的创建下去(32位系统最大到512M)。 文件集在内部会被切分成多个数据域,数据域之间使用双向链表连接。 不同数据域的存储类别用名字空间区分,如每个集合有自己独立的名字空间,每个索引也有自己独立的名字空间。 * MongoDB内部数据结构 名字空间与数据域的关系 test.0 test.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 test.table1 test.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 test.table2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 test.table3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 test.freelist 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 * MongoDB内部数据结构 名字空间与数据域的关系 每个名字空间可以有不同的数据域,且在磁盘上不必连续。 图中还有一个特殊的名字空间freelist,存放着不再使用的数据域,如删除集合或索引产生的数据域。 当名字空间分配新的数据域时,会先查找空闲列表,看看是否有适合大小的数据域可用。 索引数据也保存在数据域中,其结构被组织成B-Tree形式。 在每一个数据域中,保存了具体一行行BSON格式的数据。 * MongoDB内部数据结构 对每一个域来说,其头部包含了一些元数据,比如自己的位置,上一个域和下一个域的位置, * MongoDB内部数据结构 域中第一条和最后一条数据记录的位置,剩下的部分用于存储具体的数据。 * MongoDB内部数据结构 名字空间与数据域的关系 对于每个数据库,都有一个名字空间文件“dbname.ns”。 在名字空间文件中,保存的是一个哈希表,存储了每个名字空间的元数据,包括其大小,域数,第一个域位置,最后一个域位置,被删除的域的链表、索引信息等,如下图: * MongoDB内部数据结构 * MongoDB简单应用 MongoDB读操作 WHERE # select * from students where name = Joe db.students.find({name : Joe}) FIELDS # select name, age from students where age = 33 db.students.find({age : 33}, {name : 1, age : 1}) # select name, age from students db.students.find({}, {name : 1, age : 1}) * MongoDB简单应用 MongoDB读操作 SORT # select * from students order by age db.students.find().sort({age : 1}) # select * from students order by sex asce, age desc db.students.find().sort({sex : 1, age : -1}) SLICE # select * from students skip 2 limit 3 db.students.find().skip(2).limit(3) # select * from students where sex = male and age 18 and age 30 db.students.find({sex : “male”, age : {$gt : 18, $lt : 30}}) 比
文档评论(0)