《技术贴—Mongodb解析》要点:
本文介绍了技术贴—Mongodb解析,希望对您有用。如果有疑问,可以联系我们。
相关主题:非关系型数据库
MongoDB 是一个基于分布式文件存储的数据库.旨在为 WEB 应用提供可扩展的高性能数据存储办理方案.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包括其他文档,数组及文档数组.
MongoDB的提供了一个面向文档存储,操作起来比拟简单和容易.
可以在MongoDB记录中设置任何属性的索引(如:FirstName="Sameer",Address="8Gandhi Road")来实现更快的排序.
可以通过当地或者网络创建数据镜像,这使得MongoDB有更强的扩展性.
如果负载的增加(必要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上这就是所谓的分片.
Mongo支持丰富的查询表达式.查询指令使用JSON形式的标志,可轻易查询文档中内嵌的对象及数组.
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 .
Mongodb中的Map/reduce主要是用来对数据进行批量处置和聚合操作.
Map和Reduce.Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处置.
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作.
GridFS是MongoDB中的一个内置功能,可以用于寄存大量小文件.
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接挪用即可.
MongoDB支持各类编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言.
MongoDB安装简单.
Mongodb现阶段已被许多大型网站应用,例如:淘宝,京东,github,ebay等.许多网站并非完全将传统的关系型数据库替换为mongodb,而是选择性的在部分模块应用.在应用mongodb之前,要根据自身需求以及mongodb的特点、不敷进行选择.目前,mongodb适用于以下一些场景:
网站数据:mongo非常得当实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性.
缓存:由于性能很高,mongo也得当作为信息基础设施的缓存层.在系统重启之后,由mongo搭建的持久化缓存可以避免下层的数据源过载.
大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比拟贵,在此之前,很多程序员往往会选择传统的文件进行存储.
高伸缩性的场景:mongo非常得当由数十或者数百台服务器组成的数据库.用于对象及JSON数据的存储:mongo的BSON数据格式非常得当文档格式化的存储及查询.
Mongodb相对关系型数据库有如下长处:
高可扩展性
散布式计算
低本钱
架构的灵活性,半布局化数据
没有繁杂的关系
在满足以上长处的同时,却没有关系型数据库那样严格的事物支持,通常情况下,mongodb这一缺点阻碍了人们对其的选择.对于习惯利用关系型数据库的开发人员来说,mongodb没有关联查询,这也是在做数据库选型时会考虑到的.
在非关系型数据库中,mongdb拥有相对突出的优势,mongodb之所以是介于关系型数据库和非关系型数据库的产品,在于它提供了非常丰富的功能,例如MySQL中常用的数据增编削查,索引,聚合查询,分页这些功能,mongodb都提供了相应的能力,与hbase列存储相比,方便了数据的可操作性.
针对开发者在进行项目数据库选型时,根据mongodb的特点,优势,缺点综合考虑其适合性.例如在项目中进行的事务性操作比拟多,那么mongodb就不是合适的选择.考虑到mongodb的数据存储结构比拟灵活,并非固定结构,即扩展性高,那么在项目中经常出现需要扩展数据字段的情况,则可以选择mongodb.当然,项目中也可以利用不同的数据库,根据数据的性质选择存储的位置.
以下通过与MySQL对照介绍mongodb基本的术语:
通过下图实例,我们也可以更直观的的了解Mongo中的一些概念:
在mongodb中不存在表关联这一概念,但可以利用文档的内嵌到达数据的直接关联.
数据库
一个mongodb中可以建立多个数据库. MongoDB的默认数据库为"db",该数据库存储在data目录中. MongoDB的单个实例可以容纳多个独立的数据库,每一个都有本身的集合和权限,不同的数据库也放置在不同的文件中.
集合
集合就是MongoDB文档组,类似于RDBMS(关系数据库管理系统:RelationalDatabase Management System)中的表格.集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有必定的关联性.
文档
文档是一组键值(key-value)对(即BSON).MongoDB的文档不必要设置相同的字段,并且相同的字段不必要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点.
MongoDB 数据类型
下表为MongoDB中常用的几种数据类型.
Mongodb的Linux安装比拟简单,在安装完mongodb后,正常启动的情况下,进入应用的/bin目录下,执行命令./mongo便进入mongodb的后台管理shell,第一次进入shell时是默认选择test库.可通过exit或quit(),或trl+C退出shell.
Mongodb中常用的shell指令
以上简单介绍指令的用法,详细阐明可参考官方文档:https://docs.mongodb.com/manual/mongo/
在mongodb中创建索引时必要注意的事项:
索引占据存储空间,存储在内存中,不克不及超过内存的限制,如果超过会自动删除索引,影响性能.
集合中索引不克不及超过64个
索引名的长度不克不及超过125个字符
一个复合索引最多可以有31个字段
GridFS是MongoDB中的一个内置功能,可以用于寄存大量小文件,以下简单介绍gridFS的用途特点:
GridFS 用于存储和恢复那些跨越16M(BSON文件限制)的文件(如:图片、音频、视频等).
GridFS 也是文件存储的一种方式,然则它是存储在MonoDB的集合中.
GridFS 可以更好的存储年夜于16M的文件.
GridFS会将年夜文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中.
GridFS 用两个集合来存储一个文件:fs.files与fs.chunks.
每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自界说的属性)将会被存在files集合中.
fs.files 集合文档举例:
{
"filename": "test.txt",
"chunkSize": NumberInt(261120),
"uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
"md5": "7b762939321e146569b07f72c62cca4f",
"length": NumberInt(646)
}
fs.chunks 集合文档举例:
{
"files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
"n": NumberInt(0),
"data": "Mongo Binary Data"
}
详细阐明可参考官方文档:https://docs.mongodb.com/manual/core/gridfs/
在mongodb3.0之前,存储引擎是MMAP,属于库级锁,所有数据库的集合文档,索引数据存入一个文件.
Mongodb3.0,推出了MMAPV1,wiredtiger .
MMAPV1,适应于所有MongoDB版本,MongoDB3.0的默认引擎,属于集合级锁.相对付MMAP,并发性能有所提升,同时其空间预分配策略以2的N次方规则进行分配,优化了空间的利用.
Wiredtiger,在mongodb3.2作为默认的存储引擎,通过多版本并发控制完成文档级别锁,并发量提高;数据压缩率高于MMAPV1,由于数据压缩率高,占用内存及CPU也增高;wiredtiger通过按期数据快照操作和预写日志完成数据的一致性,同时可作为数据恢复的依据.
在mongodb3.2版本还推出了In-Memory存储引擎,其特点是数据存储于内存中,只将少量元数据和诊断日志存储到磁盘.
Mongodb的存储引擎类型可通过参数进行配置,开发者可依据几个存储引擎的特点结合实际需求进行选择.
《技术贴—Mongodb解析》是否对您有启发,欢迎查看更多与《技术贴—Mongodb解析》相关教程,学精学透。维易PHP学院为您提供精彩教程。