MongoDB 体系结构与数据模型
每日一句
If no one else guards the world, then I will come forward.
如果没有别人保卫这个世界,那么我将挺身而出。
概述
MongoDB主要是由文档(document)、集合(collection)、数据库(database)这三部分组成的。类比于mysql的行、表、数据库。
体系结构
MYSQL 与 MongoDB对比
MongoDB与SQL的结构对比详解
SQL Terms/Concepts | MongoDB Terms/Concepts | 解释与说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document or BSON document | 数据记录行/文档 |
column | field | 数据库字段/域 |
index | index | 索引 |
table joins | embedded documents and linking | 表连接,MongoDB不支持,MongoDB通过嵌入式文档来替代多表连接 |
primary key Specify any unique column or column combination as primary key. | primary key In MongoDB, the primary key is automatically set to the _id field. | 主键,MongoDB自动将_id字段设置为主键 |
aggregation (e.g. group by) | aggregation pipeline See the SQL to Aggregation Mapping Chart. |
数据模型
MongoDB的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在MongoDB中以BSON ( Binary-JSON)文档的格式存储在磁盘上。
BSON ( Binary Serialized Document Format )是一种类json的一种二进制形式的存储格式,简称Binary SON。
BSON和SON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
BSON采用了类似于C语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。
这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。
Bson中,除了基本的SON类型:string integer,boolean,double,nullarray和object , mongo还使用了特殊的数据类型。
这些类型包括date,object idbinary data,regular expression和code。
每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息。
BSON数据类型参考列表:
数据类型 | 描述 | 举例 |
---|---|---|
字符串 | UTF-8字符串都可表示为字符串类型的数据 | {"x" : "foobar"} |
对象id | 对象id是文档的12字节的唯一 ID | {"X" :ObjectId() } |
布尔值 | 真或者假:true或者false | {"x":true}+ |
数组 | 值的集合或者列表可以表示成数组 | {"x" : ["a", "b", "c"]} |
32位整数 | 类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。 | shell是不支持该类型的,shell中默认会转换成64位浮点数 |
64位整数 | 不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数 | shell是不支持该类型的,shell中默认会转换成64位浮点数 |
64位浮点数 | shell中的数字就是这一种类型 | {"x":3.14159,"y":3} |
null | 表示空值或者未定义的对象 | {"x":null} |
undefifined | 文档中也可以使用未定义类型 | {"x":undefifined} |
符号 | shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串 | |
正则表达式 | 文档中可以包含正则表达式,采用JavaScript的正则表达式语法 | {"x" : /foobar/i} |
代码 | 文档中还可以包含JavaScript代码 | {"x" : function() { /* …… */ }} |
二进制数据 | 二进制数据可以由任意字节的串组成,不过shell中无法使用 | |
最大值/最小值 | BSON包括一个特殊类型,表示可能的最大值。shell中没有这个类型。 |
提示:
shell默认使用64位浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符
号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
美文佳句
读过一段话,觉得很有感触:温柔的人通常是这样诞生的,他们亲身经历过许许多多的难,过后决定不再让其他人像自己这般难过。这份体贴,人们称之为温柔。
每个人的经历不同,但我相信,温柔的人必然都是具有同理心的人。他们知道有些话有些行为会让人不舒服,所以能将心比心,在尊重自己的同时也尊重别人。要想被他人温柔以待,就要先学会温柔待人。
你好,我是yltrcc,日常分享技术点滴,欢迎关注我:ylcoder
MongoDB 体系结构与数据模型的更多相关文章
- MongoDB学习笔记~数据模型属性为集合时应该为它初始化
回到目录 今天要说一下技术点,我们在设计mongodb的数据模型时,如果属性是数组或者集合类型,我们在模型初始化时,需要为它们初始化一下,否则在数据库里将会被存储为NULL,当被存储为NULL时,我们 ...
- hadoop学习笔记(六):HBase体系结构和数据模型
1. HBase体系结构 一个完整分布式的HBase的组成示意图如下,后面我们再详细谈其工作原理. 1)Client 包含访问HBase的接口并维护cache来加快对HBase的访问. 2)Zooke ...
- MongoDB数据模型(一)
原文地址 一.数据模型介绍 MongoDB中的数据有着灵活的架构.与SQL数据库不同,因为SQL数据库必须先定义表结构,然后才能向其中插入数据,而MongoDB的集合不强制任何文档结构.这个灵活性方便 ...
- MongoDB的数据模型
文档的数据模型代表了数据的组织结构,一个好的数据模型能更好的支持应用程序.在MongoDB中,文档有两种数据模型,内嵌(embed)和引用(references). 内嵌 MongoDB的文档是无模式 ...
- MongoDB:数据模型介绍
在MongoDB的数据有灵活的模式.不像SQL数据库,(SQL数据库)要求你必须在插入数据之前决定和声明一个表的模式.MongoDB的集合不强制文档的结构.这个灵活性有利于文档到实体或对象的映射. 每 ...
- Mongodb数据模型
描述表关系的方式: 方式一:嵌入式 > db.person.find({name:'zjf'}).pretty() { "_id" : ObjectId("592f ...
- 关于Mongodb的全面总结
MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...
- [MongoDB知识体系] 一文全面总结MongoDB知识体系
MongoDB教程 - Mongo知识体系详解 本系列将给大家构建MongoDB全局知识体系.@pdai MongoDB教程 - Mongo知识体系详解 知识体系 学习要点 学习资料 官网资料 入门系 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
随机推荐
- css 迷惑的position
迷惑的position 小加发现实际开发中position使用频率很高,但很多人却对position不是很了解,导致开发中出现各种问题,现在让我门一起来看看这个迷惑的position吧~ static ...
- JS 中的日期时间操作计算实例
实例 一:已知日期格式为 "YYYY/MM/DD",计算相对于今天的天数差. function fromNow(date){ var mTimes = new Date(date) ...
- Android中的Preference结构的设计与实现
本文主要通过分析源代码来分享Preference的设计和实现方式,让开发者们在今后更加顺手地使用和扩展Preference类,或者在设计其他类似的界面和功能时可以提供参考帮助. Preference概 ...
- 前后端分离mockjs以及webpack-dev-server代理
一: 在webpack中使用mockjs mockjs 也就是模拟数据(mock.js模拟的数据可以不跨域) 安装mock新建mock.js var Mock = require('mockjs') ...
- 将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件
本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明. ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMa ...
- c++对c的拓展_引用的基本用法
实质:取别名 格式:原类型&别名=原变量名: 注意:1.定义时必须初始化 2.初始化后不能够改变指向 3.不可对Null进行引用 4.可对任意类型取别名包括数组(int (&别名)[个 ...
- Java中的List接口实现类LinkedList
package collection; import java.util.LinkedList; /* * 1.implement List接口 * 2.底层是一个链表结构:查询慢,增删快 * 注意: ...
- print,printf,println的区别,以及\r,\n,\r\n的区别
1.常用的是println,就是换行输出 2.print,不换行输出 3.printf常使用于格式转化 public class Print { public static void main(Str ...
- 基于STM32单片机的简单红外循迹的实现
初步接触STM32,采用两路红外传感器实现小车循迹,稍显简略,如有不好的地方,欢迎大家指点改正
- 【面试普通人VS高手】Kafka的零拷贝原理?
最近一个学员去滴滴面试,在第二面的时候遇到了这个问题: "请你简单说一下Kafka的零拷贝原理" 然后那个学员努力在大脑里检索了很久,没有回答上来. 那么今天,我们基于这个问题来看 ...