首页 > 代码库 > MongoDB简介

MongoDB简介

---------------------MongoDB简介---------------------
1、简介
    MongoDB是基于文档的存储的(而非表),是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。模式自由(schema-free),意味着对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
 
    Mongo主要解决的是海量数据的访问效率问题。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎。
 
2、适用场景
    1、网站数据:适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
    2、缓存:由于性能很高,也适合作为信息基础设施的缓存层。在系统重启之后,搭建的持久化缓存可以避免下层的数据源过载。   
    3、大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
    4、高伸缩性的场景:非常适合由数十或者数百台服务器组成的数据库。
    5、用于对象及JSON数据的存储:MongoDB的BSON数据格式非常适合文档格式化的存储及查询。
 
3、应用案例
    1、京东,中国著名电商,使用MongoDB存储商品信息,支持比价和关注功能.
    2、赶集网,中国著名分类信息网站,使用MongoDB记录pv浏览计数
    3、奇虎360,著名病毒软件防护和移动应用平台,使用MongoBD支撑的HULK平台每天接受200亿次的查询.
    4、百度云,使用MongoDB管理百度云盘中500亿条关于文件源信息的记录.
    5、CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB
    6、纽约时报,领先的在线新闻门户网站之一,使用MongoDB
    7、sourceforge.net,资源网站查找,创建和发布开源软件免费,使用MongoDB的后端存储
 
4、不适合场景
    1、高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
    2、传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
    3、需要SQL的问题
 
技术分享
--------------------MongoDB介绍---------------------
1、数据库
    1、一个集合的物理容器。一个单一的MongoDB服务器通常有多个数据库。
    2、MongoDB中多个文档组成集合,同样多个集合可以组成数据库。一个MongoDB实例可以承载多个数据库,它们之间可视为完全独立的。每个数据库都有独立的权限控制,即便是在磁盘上,不同的数据库也放置在不同的文件中。将一个应用的所有数据都存储在同一个数据库中的做法就很好。要想在同一个MongoDB服务器上存放多个应用或者用户的数据,就要使用不同的数据库了。
    3、命名规则
        1、不能是空字符串("")。
        2、不得含有‘‘(空格)、.、$、/、\和\0(空字符)。
        3、应全部小写。
        4、最多64字节。
        5、保留的数据库名:admim local config
 
2、集合
    集合就是一组文档。如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表。
    1、无模式
        集合是无模式的。这意味着一个集合里面的文档可以是各式各样的。
    2、命名
        1、集合名不能是空字符串""。
        2、集合名不能还有\0字符(空字符),这个字符表示集合名的结尾
        3、集合名不能以"system"开头,这是为系统集合保留的前缀。
        4、用户创建的集合名字不能含有保留字符$。有些驱动程序的确支持在集合名里面包含$。这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
    3、子集合
        组织集合的一种惯例是使用"."字符分开的安命名空间划分的子集合。例如一个带有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors。这样做的目的只是为了组织结构更好些,也就是说blog这个集合及其子集合没有任何关系。
3、文档
    文档是MongoDB的核心概念。多个键及其关联的值有序的放置在一起便是文档。
每种编程语言表示文档的方法不一样,但是大多数编程语言都有相通的一种数据结构,比如映射、散列或字典。
    规范:
        1、键不能包含\0(空字符)。这个字符用来表示键的结尾
        2、.和$有特别的意义,只有在特定环境下才使用。
        3、以下划线"_"开头的键是保留的,虽然这个并不是严格的要求。
    MongoDB不但区分类型,也区分大小写。
    MongoDB的文档中不能有重复的键。
 
4、RDBMS VS MongoDB对应表
    SQL术语/概念    MongoDB术语/概念              解释/说明
    database           database                          数据库
    table                 collection                              数据库表/集合
    row                   document                             数据记录行/文档
    column             field                                      数据属性/字段(域)
    index                index                                    索引
    table joins        Embedded Documents        表连接,MongoDB3.2提供了Join操作
    primary key        primary key                       主键,MongoDB默认自动将_id字段设置为主键,可以手动设置
 
5、注:_id是一个12字节的十六进制数,保证每一份文件的唯一性
    1、前4个字节为当前时间戳。
    2、未来3个字节的机器ID。
    3、接下来的2个字节的MongoDB的服务进程id。
    4、剩余3个字节是简单的增量值。
 

MongoDB简介