`
runfriends
  • 浏览: 229345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mongo简介——mongo的主要特性

阅读更多

从今天开始每天一篇关于mongo的小文章。

开始之前首先介绍一些规范。

1)除函数名和关键字以外,所有数据库名、集合名、字段名等一律用加粗的大写字母和下划线表示,以示醒目;所有名称不以下划线开头,下划线只用来分割单词。

2)所有需要在代码中以字面值或变量出现的,在文章中一律以下划线开头且以下划线分割的的大写英文单词表示,绝不出现字面值或变量定义。比如,要定义一个集合的初始大小,则需要在指定初始值的地方使用INIT_SIZE表示。

3)为方便表达,文档、数据库、集合统称为实体(在我看过的相关书籍和文档中没有记的有实体这个名词,此处只是为了个人表达方便)。

4)数据SCHEMA在这一系列文章中称做模式

 

 

开始之前的一些废话:这一系列文章只为介绍mongo并鼓吹宣扬mongo的特性和优点,行文偏颇处,诸位看官请莫较真。

mongo的特性

1)mongo是一个面向文档的数据库,它集合了nosql和sql数据库两方面的特性。

2)所有实体都是在首次使用时创建。

3)没有严格的事务特性,但是它保证任何一次数据变更都是原子性的。

4)也没有固定的数据模型,同一个数据库内可以保存不同业务类型的数据,同一个集合可以保存拥有不同字段名、字段类型,甚至不同字段数量的文档;这一特性在某些情况下特别方便,减少了设计数据模型方面的困难,当然也需要更加谨慎的设计数据模型,否则将会为将来的维护和开发带来难以预料的灾难。

5)mongo以javascript作为命令行执行引擎,它自带一个javascript解释器,支持全部javascript语法特性,当然这个解释器与其它javascript解释器一样,也是单线程的,所以利用shell进行复杂的计算和查询时会相当的慢。

6)mongo本身支持集群和数据分片,如果想要把mongo作为主要数据存储和管理工具,只需要在数据库集群服务器上安装mongo即可实现数据库集群、负载均衡和数据分片。

7)mongo是c++实现的,支持windows mac linux等主流操作系统

8)性能远超mysql,国外已经有很多公司把数据完全从mysql迁移到mongo,并把mongo作为主要数据存储和管理工具。这些公司涉足互联网应用的各种不同领域。甚至有些公司舍弃了缓存服务器直接通过mongo为前端提供数据支持,仍然取得了良好的性能和可用性。个人认为目前凡是用mysql实现的应用都可以迁移到mongo上面,并能取得优秀的性能。当然,不得不提的是,尽管mongo不是模式严格的数据库,但是却需要更加谨慎的设计数据模型,否则会在将来的开发和维护工作中带来难以预料的混乱。换句话说,越自由灵活的工具,越需要谨慎的使用。

9)许可证协议:MONGO遵守GNU-AGPL许可。该许可要求,任何对源友的修改必须公布出来。维护MONGO的公司也为那些想保护核心服务器增强特性的公司提供了特殊的商业许可。

===================================================================================

基本概念:数据库、集合、文档

数据库:可以类比为关系数据库里的数据库的概念,也是惟一一个二者之间最接近的概念。

集合:可以类比为关系数据库里的表,但二者差异是巨大的。首先集合没固定的数据模式,可以向集合内插入完全不同的数据。这里集合的概念更像是数学意义上的集合,它完全符合数学的集合定义。

文档:mongo的基本数据存储单元

mongo以类似json的二进制数据格式BSON保存数据。JSON是文本数据格式,BSON是二进制的。

mongo又在json的基础上进行了扩展,增加了更多数据类型,更详细的内容请参考以下链接:mongo简介——BSON

mongo把保存到数据文件里的每一个BSON看作一个文档,可以把文档视作关系数据库表里的一条记录。

每一个文档储存在一个集合里面。

索引:mongo的索引以集合单位建立的BTREE索引。所以创建索引时,应当充分考虑到BTREE的优势和限制。

===================================================================================

SCHEMA设计原则与注意事项

1)mongo支持即时、任意字段查询。任意的数据变更立即可查,可查询文档中任意字段的数据,而不必返回整个文档。

2)不支持文档间的联合查询

3)没有事务

4)比RDBMS更多原子操作,而且每次增、删、改都是原子性的

5)支持复杂的文档,BSON支持文档嵌套和数组,数组元素可以是基本数据也可以是文档

设计SCHEMA时需要考虑的几方面:

具体需求、读写比、需要何种查询、数据如何更新、各种并发问题、数据结构化程度。(关于这个问题,在mongo特性全部介绍完以后再详细讨论)

1.不要创建无法分片的集合。总是希望业务量越来越大的,随着业务量的增长,数据分片迟早会到来。所以应创建易于分片的集合。

2. 文档嵌套不要过多。嵌套层次太多会降低查询效率

3. 除了二进制数据,最好文档尺寸都小于100k。小文档更新的开销更少,查询也更快。

3. 不要把不同的业务类型的数据放到一个集合里。集合的代价很低,不必吝啬。比如把用户数据跟博客数据放到一个集合里就不好。

4. 不要一个用户一个集合,集合太多会超过mongo命名空间的阈值。

5. 相同的文档键名应保证是相同的数据类型。这样易于管理,不易产生混乱。

6. 创建有效索引。

7
2
分享到:
评论
2 楼 runfriends 2013-02-17  
ray_linn 写道
mongo 是啥衣服牌子吗?mongodb 才是全称好不?

我懒,少敲两个字母。
说mongo大家都知道啦,不要较真啦。
1 楼 ray_linn 2013-02-17  
mongo 是啥衣服牌子吗?mongodb 才是全称好不?

相关推荐

    php_mongo_5.2.6.6

    PHP为了方便开发者与MongoDB数据库打交道,提供了专门的MongoDB扩展——php_mongo。本文将详细介绍标题为"php_mongo_5.2.6.6"的扩展,它是专为PHP 5.2.6版本设计的一个重要组件。 一、php_mongo扩展简介 php_mongo...

    30分钟学MongoDB系列——Mongo分布式架构篇(简介)

    分布式架构主要分为两大类:分布式计算和分布式存储。随着移动和PC数据的大量增长,传统的单机处理模式已经无法满足对海量数据的处理需求。因此,横向扩展成为一种有效的解决方法。但横向扩展并非无代价,对于小量...

    mongo官方文档v4.0

    总之,"mongo官方文档v4.0"涵盖了MongoDB的基础知识、高级特性和最佳实践,对于想要学习或深入理解MongoDB的开发者来说,是一份不可或缺的参考资料。通过阅读和实践文档中的示例,你可以掌握如何安装和配置MongoDB,...

    lua-mongo:用于Lua的MongoDB驱动程序

    当这两种技术结合时,就诞生了“lua-mongo”——一个专门为Lua设计的MongoDB驱动程序,它为Lua开发者提供了与MongoDB交互的强大工具。 lua-mongo是Lua社区中的一款开源项目,它的目标是使Lua程序员能够充分利用...

    前端开源库-mongo-unit

    这里就要提到一个非常实用的工具——Mongo-unit,它是一个专门为MongoDB设计的前端开源库,用于帮助开发者对应用中的数据库操作进行单元测试。 Mongo-unit的核心功能在于模拟MongoDB环境,允许开发者在不实际触碰...

    robo mongo

    标签重复了标题中的内容,再次明确了Robo 3T的主要功能——作为MongoDB的GUI管理工具。 在压缩包子文件的文件名称列表中,"Robomongo-0.8.4-i386"表明这是Robo 3T的一个旧版本,版本号为0.8.4,适用于32位(i386)...

    mongo nodejs版管理工具

    本项目就是基于Node.js构建的MongoDB管理工具——adminMongo。 adminMongo是一个用户友好的Web界面,它提供了对MongoDB数据库的全面管理功能。通过Node.js,adminMongo可以轻松地与MongoDB服务器进行交互,提供了一...

    postgres-mongo的对比1

    【主要内容】:这篇对比分析主要探讨了两种不同类型的数据库——Postgres(一种关系型数据库)和MongoDB(一种NoSQL文档型数据库)的优缺点,以及它们在实际应用中的适用场景。文章首先介绍了数据库理论的基础,包括...

    开源项目-mongodb-mongo-go-driver.zip

    此开源项目——"mongodb/mongo-go-driver",已经进入了Alpha 2阶段,意味着它在功能实现和性能优化上取得了重要的进展。本文将深入探讨该驱动器的主要特性和使用方法。 1. **Go语言兼容性**:MongoDB Go驱动器完全...

    各种数据库特性及比较

    HDFS 是一个分布式文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件,并且是分布式的,由很多服务器联合起来实现其功能。HDFS 的重要特征包括: * 文件在物理上是分块存储(block),块的大小可以...

    天地图GaussDB的应用实践.pdf

    《天地图GaussDB的应用实践》是一份详细探讨地理信息公共服务平台——天地图与GaussDB(for Mongo)在自然资源行业数据库应用与定制的解决方案。天地图是中国国家地理信息公共服务平台,旨在集成各级地理信息资源,...

    elixir-mongodb-driver:Elixir的MongoDB驱动程序

    **Elixir的MongoDB驱动程序——elixir-mongodb-driver** `elixir-mongodb-driver` 是一个专门为Elixir编程语言设计的MongoDB驱动程序,它允许Elixir应用与MongoDB数据库进行无缝交互。这个驱动程序提供了丰富的功能...

    node-mongo-crud

    《Node.js与MongoDB数据库操作详解——基于"Node-Mongo-Crud"实践》 在现代Web开发中,Node.js作为JavaScript的服务器端运行环境,搭配非关系型数据库MongoDB,形成了高效、灵活的数据处理方案。"Node-Mongo-Crud...

    php_mongodb.dll php 7.0下载

    在PHP 7.0之前,使用的是旧版的`mongo.so`驱动,该驱动已经不再维护,且不支持新版本的MongoDB特性。因此,对于PHP 7.0及更高版本,需要使用更新的`mongodb`扩展,即`php_mongodb.dll`,它提供了与MongoDB服务器通信...

    java面试——MongoDB面试专题.zip

    - 使用MongoTemplate进行自定义操作。 11. **最新特性**: - 熟悉MongoDB的最新版本(如v4.x)引入的新功能,如交易(Transactions)、变更流(Change Streams)等。 在面试中,除了技术知识,还会考察你对项目...

    Mongo_On_Web

    在 web 开发中,MongoDB 与 JavaScript 结合尤其紧密,因为 MongoDB 的主要驱动程序和查询语言——Mongoose,就是用 JavaScript 编写的,且 Node.js 平台广泛使用 JavaScript。 MongoDB 使用 JSON 格式的文档存储...

    mongo_db_university:课程作业

    首先,我们需要理解MongoDB的核心特性。它采用NoSQL数据库模型,这意味着数据以键值对或文档的形式存储,而不是传统的表格结构。这种模型非常适合处理半结构化和非结构化的数据。MongoDB使用BSON(Binary JSON)格式...

Global site tag (gtag.js) - Google Analytics