mongodb入门概念
数据库为数据提供可靠的持久存储,数据库放在服务端,而客户端的数据存储时临时的,终端容易发生应用错误,用户错误或被篡改,同时客户端数据也难以点对点分享(必须双方在线)。
数据库类型非常多,每一种都有所擅长和缺点,mongodb的目标是成为通用数据库,而数据库使用mongodb非常适合单页面应用,这样前后端都使用js、json。
最大的好处就是消除了数据转换,因为前端向后端传JSON,后端向数据库传JSON,没有数据转换使得复杂的系统变得简单一些,同时也降低了风险,维护也更方便。
根据mongodb官网描述:
mongodb是一种可扩展的,高性能的、开源的NoSQL数据库,面向文档的存储,使用动态schema来提供简洁而强大的功能。
逐个分析:
- 可扩展、高性能: mongodb被设计为可使用普通的服务器进行水平扩展,能够很容易添加额外服务,扩展容量或性能。
- 面向文档的存储: mongodb用JSON格式存储数据,而不是表,文档以集合的形式进行存储(可类比表,但区别明显)
- 动态schema: 关系型数据库需要schema来定义什么数据可以存储在什么表中,而mongodb不用一开始就定义,可以在集合中存储任何json文档,在同一个集合中的文档,可以完全有不同的结构,在更新文档的时候可以彻底改变文档结构。
关于动态文档结构:
mongodb不限制文档结构,不用定义结构就可以在集合中添加文档。甚至不需要先创建集合,向不存在的集合中插入数据时会新建集合,对比关系型数据库,必须明确定义表和schema,对数据结构的任何改动都需要修改schema。
而不需要schema的数据就有如下的一些有点:
- 文档结构灵活。不管时什么结构,mongodb都会存储文档,若文档结构频繁更改或文档没有结构,不需要对它们进行调整,mongodb会直接存储。
- 经常变化的应用不需要更改数据库。当更新文档而有了新的或者是不同的属性时,可以直接部署应用,它会立即开始保存新的文档结构。否则可能需要修改代码,为以前保存的文档增加不存在的文档属性。
- 没有会引起停机或延时的schema变化,不必锁定数据库的部分功能(关系型数据库在变化schema时需要锁定数据库的一些功能)
- 不需要schema设计的专业知识(即:上手快,门槛低)
其实所有的不需要schema定义的数据库都有如下的缺点,也包括mongodb:
- 没有强制的文档结构。没有在数据库级别强制文档结构,对文档结构的任何修改都不会自动传播给已经存在的文档,当多个应用使用相同的集合时会非常痛苦
- 没有文档结构的定义。数据库中没有地方为数据库程序员或应用来确定数据结构是什么。通过查看文档来确定集合的目的比较困难,因为无法保证文档与文档之间的结构是一样的。
- 没有明确的定义。文档数据库没有数学上的明确定义,当在关系型数据库中存储数据时,经常有数学上可证明的最佳实践做参考,使得数据访问尽可能的快和灵活。对mongodb的优化也没有明确的定义,尽管一些传统的方法是有的,如索引。
mongolab 通过Mongolab申请免费的MongoDB测试实例