`
止甬V
  • 浏览: 24080 次
社区版块
存档分类
最新评论

MongoDB学习笔记(一)—— 初识

阅读更多

1、 是什么

 

MongoDB 提供灵活、可扩展的存储方式,是面向文档的数据库,而不是关系型数据库,因此被称为NoSQL 数据库(与经典的关系数据库如Oracle 、SQLServer 、DB2 新相比)。在传统的关系数据库中,用类似网格的平面模型来表示数据,现实中的数据对象映射到数据库中的行(ROW ),一系列相同类型的数据的集合映射到数据中的表(Table ),有强模式存在,即,数据所相同的类型需要在数据库中强行定义,表结构一旦确定,就确定了表中所有数据所必须遵守的模式。而在MongoDB 中,现实中的数据对象映射,从行(ROW )变为文档(Document ),文档的键可以随意定义,而不需要强制规定,因此是无模式的。无模式的设这将给系统带来极大的扩展性和灵活性。

 

2、 有什么,没有什么

 

MongoDB 提供索引能力,可以存储JavaScript ,支持聚合(MapReduce 得过),支持集合及文件存储功能。

MongoDB 不具备关系数据库中链接(join )和复杂的多行事务。

 

3、 适合做什么,不适合做什么

 

作为文档型的数据库,MongoDB 适合于要求频繁、快速查询业务数据,但并不经常更新数据的场景,同时非常适合分布式部署的应用。这一特性使MongoDB 非常适合社交型的网站数据库应用,如微博、SNS 应用,内容一旦发布出去后,就很少(或不能)修改,但需要频繁地查询读取。另外也比较适合应用到系统日志、用户追踪等应用中。

MongoDB 不适合应用到数据频繁修改的业务场景,如工作流,内部办公系统等。

 

 

4、 如何唯一标识文档?

 

MongoDB 是无模式的,虽然文档集合并没有确定键值约束,但每个文档都需要有一个特殊的键:“_id ”,它在文档所在的表中是唯一的,相当于关系数据库中的唯一主键。

这个键值可以是任意类型,默认情况下是ObjectId 类型。ObjectId 使用12 字节的存储空间,每个字节两位16 进制数字,是一个共24 位长的字符串。

 

5、 需要自动生成ObjectId 吗?

 

在插入操作时,如果没有指定_id 键,系统将会按照下面方式自动生成一个:

 

4 字节时间戳 + 3 字节机器码 + 2 字节进程标识符 + 3 字节计数器

 

总共12 个字节,24 位字符串。同一秒钟每一进程最多允许有256^3(16777216) 个不同的ObjectId。就一般应用来说,这种生成_id 键的方式已经足够了。但对于大型应用来说,这个方式并不是一个很好的方式。很明显,3 字节的机器码和2 字节的进程标识符总共5 个字节的内容可以说是完全浪费了的(在运行过程中是静态的),3 字节的计算器也会有大量的浪费。在大数据量(千万级以上)的应用中,_id 及其索引的存储将成为数据库性能的瓶颈。试想,如果有1 亿条记录,则仅_id将至少占用10^8*12 约1GB 的硬盘空间。

 

因此,_id 最好是在客户端由驱动程序去生成,你可以根据自己的业务需求,自己去设置_id 的生成规则。同时,在客户端生成_id 的话,也可以减少数据库的开销,而且还可以加入更友好的API ,如插入后返回_id 的值。

分享到:
评论

相关推荐

    mongodb学习笔记资料

    mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复

    NoSQL介绍PPT

    常见NoSQLj介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB 常见NoSQL介绍——MongoDB...

    MongoDB学习笔记

    自己在学习MongoDB的一些笔记,里面有各个查询选择器的使用截图,还有一些索引的介绍。

    MongoDB学习笔记思维导图.pdf

    MongoDB学习笔记思维导图.pdf

    MongoDB_学习笔记

    MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_...

    Mongodb学习笔记.docx

    Mongodb 学习笔记

    mongodb学习笔记

    mongodb学习笔记

    MongoRedis的源代码:《左手MongoDB,右手Redis——从入门到商业实战》

    《左手MongoDB,右手Redis——从入门到商业实战》背后的故事。 这篇文章没有代码,请放心阅读。 一个程序员的一生应该这样度过:当她回首往事的时候,她不会因为建造环境浪费时间而悔恨,也不会因为浪费而无法这样,...

    mongoDB学习笔记及工具.zip

    mongoDB学习笔记及工具

    mongodb学习笔记和mongodb权威指南

    mongodb学习资料,包括mongodb_and_python学习笔记、mongodb权威指南、mongodb学习手册、mongodb总结。

    window_mongodb执行过程个人笔记——不建议下载.txt

    window_mongodb执行过程个人笔记——不建议下载.txt Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前...

    MongoDB学习笔记之GridFS使用介绍

    主要介绍了MongoDB学习笔记之GridFS使用介绍,本文介绍了GridFS的作用、GridFS的一些使用方法、GridFS实现原理及注意事项等,需要的朋友可以参考下

    MongoDB学习笔记思维导图

    总结的MongoDB的学习笔记,基本上包括了MongoDB的方方面面,每个知识点,都有示例代码,有需要的朋友,可以下载下来进一步补充完善。

    MongoDB学习笔记1

    一、关于MongoDB的驱动MongoDB支持多种语言的驱动,在此我们只介绍C#的驱动 二、通过samus驱动实现HelloWorld存取在进行下述操作之前,请

    MongoDB学习MongoDB学习MongoDB学习

    MongoDB学习MongoDB学习MongoDB学习

    MongoDB笔记.docx

    一、MongoDB简介 3 二、MongoDB结构 3 二、MongoDB 数据库关系型(这里并不是值关系型数据库的关系) 3 1、MongoDB一对一关系型 3 2、MongoDB一对多关系型 4 3、MongoDB多对多关系型 4 三、创建数据库(mongodb_test...

    MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据

    下面我们将逐步讲解怎么在MVC...这个“简易系统”的基本设计思想是这样的:我们在视图层展示表格,Jqgrid相关Js逻辑全部放在一个Js文件中,控制层实现了“增删查改”四个业务,MongoDB的基本数据访问放在了模型层实现

Global site tag (gtag.js) - Google Analytics