APP项目在制作时,MongoDB是目前IT行业非常流行的种非关系型数据库(NoSQL),其灵活的数据存储方式得到了IT从业人员的青睐。但其设计理念和使用方法是有别于传统的SQL数据库的,学习这些特陆将帮助开发人员更好地使用MongoDB。深圳APP开发公司就MongoDB的架设操作方法整理如下:
·核心机制。
·入门知识。
·高可用集群。
·LBS地理位置查询。
·MongoDB 3.0的新特性
APP开发对于MongoDB数据库简介
MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富、品像关系型数据库的数据库。其是扫1Ogen公司基c++语言编写,旨在提供可扩展的高性能数据存储解决方案。知名的IT公司中使MougoDB来构建自己的核心应用有,Foursquare、eBav、Lisco、MetLife、Adobe等,国内也有众多的团队将MougoDB作为首选数据库。
MongoDB支持的数据结构非常松散,数据采用bsori格式,可以存储比较复杂的数据类型。bsori是由1Ogen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式。
MongoDB的主要特点如下:
·读写性能高。
·灵活的文档模型给开发带来的方便。
·水平扩展机制能轻松应对从百万到十亿级别的数据量处理,这也是MongoDB名字来源于单词humougous(极大的)的原因
深圳APP开发公司程序员在下面的文章中会为读者详细介绍MongoDB的这些特点。
制作APP关于MongoDB数据库的核心机制解析:
博纳网络本文介绍MongoDB高性能背后的两个机制:hnvIAP(内存文件映射)和journal日志
APP开发使用数据库经验之MMAP(内存文件映射)
MongoDB使用了操作系统提供的hmIAP(内存文件映射)机制进行数据文件的读写,MMAP把文件直接映射到进程的内存空间,这样文件就会在内存中有对应的地址,这时对文件的读写是能通过操作内存进行的,而不需要使用传统的如fread、fwrite文件操作方式。
传统的文件操作流程:某个进程要读取硬盘上的数据,需要先把硬盘上的数据复制到内核缓冲区,再复制到进程的内存空间,如图8-1
APP开发者需要注意:miAP只是把文件映射到进程空间,并不是全部映射到内存,只有访问到的数据才会被操作系统转移到内存。但是因为内存是有限的,MongoDB虽然可以存储比内存更大的数据,但是对于热数据(也就是需要存放在内存中的数据)不建议超过内存的大小。当热数据超过内存的大小,操作系统内存管理机制会把使用频率最低的数据换到交换分区( Swap),这种来回的数据切换严重影响了MongoDB的性能。
当MongoDB需要插入新记录时,通过MMAP把数据库文件映射到内存后进行操作。MongoDB默认是每分钟把内存中映射的数据刷到磁盘,也可以通过启动参数“svncdelav”控制这个频率。另外,即使MongoDB;F把内存映射的数据刷到磁盘,操作系统也会定期把修改过的数据刷到磁盘,Linux的dirtv writeback centisecs,参数用于定义脏数据在内存停留的时间(默认为500,即5秒),过了这个时间脏数据就会被系统刷到磁盘上。
MongoDB使用了MMAP的机制把大量的文件操作部交给操作系统完成,大大减轻了MongoDB开发着的负担。
APP开发经验之Journal日志
我们通过前面的介绍可以了解到MongoDB通过MMAP机制.数据会在内存中停留一段时间,如果在这段时间内系统宕机数据还没来得及刷到硬盘,那么这些修改的数据不就丢失了吗?
MongoDB内部通过journal日志解决了这个问题。MongoDB的所有数据更新操作会记录并保存到journal日志,journal日志保存在dbpath路径中的journal文件夹中。当系统宕机后MongoDB重启时,通过journal日志上的操作记录,就能把数据恢复。
MongoDB数据库入门
MongoDB的设汁思想和MySQL是有很大区别的,其基于MongoDB的文档型系统,衍生出系列不同的特性,由此出产生了有别于MySQL的应用场景。
MongoDB是面向文档的数据,放弃关系模型的原因是为了更灵活的扩展性,当然还有别的好处,例如,MySQL中为了方便增加某个产品的额外属性,需要把产品的额外属性拆分到另外一张表中,以便进行连接查询。因此,对于额外属性的增加、删除、修改都很麻烦,需要更多额外的操作。
移动互联网项目需求经常变动和发展,关系模型的僵硬性有时不太适合这种项目。更何况移动互联网项目经常需要在线修改数据表的结构,对于上千万甚至上亿规模的数据表来说,里面的风险和对在线服务的影响很大。
用MongoDB就能很简单地解决上面的问题。
MongoDB把关系模型转变为文档模型,基本思路是把原来的行变为更灵活的文档模型,文档的键不是固定的,也不会事先定义。文档是MongoDB的核心,多个键值组合在起就是文档。文档以bjosn格式存储,bson基于JSON格式,MongoDB选择JSON进行改造的主要原因是JSON的通用性及JSON的无模式的特性。
MongoDB中集合就是组文档如果说MongoDB中的又档类似于关系数据的行,那么集合就类似于表。
MongoDB中多个文档组成集合,同样多个集合也会组成数据库。一个MongoDB实例中可以有多个数据库,它们是相互独立的,每个数据库有独立的权限设置。每个数据库名最终会变成硬盘上的文件名。MongoDB中下面的3个数据库名是保留的
最后总结下MongoDB的数据结构与MvSQL的数据结构的映射对应关系。
好了,深圳APP开发公司关于MongoDB的数据库的介绍以及使用入门,本文就介绍到这里,博纳网络会在下期的文章中重点介绍详细使用方法。