Mongodb简介
Mongodb是非关系型数据库。nosql中的一种。用c++编写而成。旨在为WEB应用提供可扩展的高性能数据库存储。
Mongodb是介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中功能最丰富,最像关系数据库的。
关系型数据库:
关系型数据库遵循ACDI的规则。Transaction事务的四个特性:
如果不考虑隔离性,可能会导致三个问题:
1.脏读:一个事务读取到了两一个事务没有提交的数据
2.不可重复读: 一个事务内先读取一条数据,这时候另一个事务提交,这个事务再次读取发现数据不同
3.虚读、幻读: 指在一个事务读取到了别的事务插入的数据,导致前后读取不一致(和不可重复读很类似),但指的是第一次读取的是3条记录,第二次读的是4条记录,前后不一致。
数据库的隔离级别:
1,serializable:可避免脏读,不可重复读,虚读情况发生,但性能较差。
2,Repeatable read:可避免脏读,不可重复读情况发生。
3,Read committed:可避免脏读情况发生(读取已经提交)
4,Read uncommitted:最低级别,以上情况均无法保证
还有一个丢失更新的问题:通过乐观锁或悲观锁来解决(基础是数据库的行级互斥锁)
mysql默认隔离级别:读已提交
oracle默认隔离级别:可重复读
为什么要用分布式系统:
如果使用单一的服务器,当这台服务器因为一些外界因素宕机了 整个网站就无法访问了,所以使用分布式系统(1.提高服务的可靠性)。当用户量变大的时候,服务器的配置如果过低就很难抵御得住这么大的用户量,这时候需要提高服务器的配置,但是提高一台服务器的配置的话价格比较高,所以使用多台同等配置的服务器(2.节约成本),从而又提高了整个网站的性能(3.提升服务器性能)。分布式系统因为是用多台服务器进行计算的(4.提高计算能力。)。当需要提升配置的时候,只需要添加几台服务器就可以了(5.可扩展性高)。6.可以共享同一些服务器资源。7.很容易安装,实施和调试新的服务。
1.提高服务器性能 (节约成本)
2.提高系统可靠性 (一台服务器宕机,不会影响到其它服务器)
3.可扩展性更高 (可以随时添加更多的机器)
4.更快的速度(集成多太机器的计算能力)
5.资源共享
6.开放的系统
7.灵活性
分布式计算的缺点:
1.故障排查和诊断比较麻烦
2.较少的软件支持
3.依赖于网络
4.可能存在数据的安全性和共享的风险
什么是NoSQL?
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
###为什么使用NoSQL ?
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
RDBMS(Relational Database Manager System) vs NoSQL
RDBMS
- 高度组织化结构化数据(一张表里的数据格式是一样的)
- 结构化查询语言SQL(Structured Query Language结构化查询语言)
- 数据和关系都存在一张表中(关系是指:数据模型符合一定条件的二维表格式)
- 数据操纵语言,数据定义语言
- 严格的一致性
- 事务支持
NoSQL
没有预定义的数据格式,高性能,高可用,可伸缩性。最终一致性,没有ACDI。
没有声明性查询语言。CAP定理。
CAP theorem CAP定理