1..Nosql 概述:
随着云计算和大数据时代的到来,互联网技术早已实现可以通过第三方平台访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。如果要对这些用户数据进行挖掘,那SQL关系型数据库已经无法满足这些业务的需求和发展 ,SQL关系型数据库已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的出现更好弥补和满足了更多的,复杂的和庞大的数据处理与分析。
NoSQL,NoSQL = Not Only SQL ,意即“不仅仅是SQL”,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
2.Nosql 的特点:
- 易扩展性突出
- 大数据量高性能
- 多样化以及灵活的数据模型
- 传统SQL关系型数据的局限性促使NoSQL的发展
3.3V+H:
- 大数据时代的3V
- 海量-Volume
- 多样-Variety
- 实时-Velocity
- 互联网时代的3H
- 高并发
- 高可扩
- 高性能
4.NoSQL数据模型简介
- 聚合模型:
- K-V键值存储模型:键值存储,即Key-Value存储,简称KV存储,NoSQL存储的一种方式。数据按照键值对的形式进行组织,索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。
- BSON存储模型:Binary Serialized Document Format, 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点,可以有效描述非结构化数据和结构化数据。
- 列族存储模型:Bigtable-Style Data Model,采用“大表格式数据模型”的数据库通常称为“列存储(Column Store)数据库”,理解列族模型的最好方式也许就是将其视为两级聚合结构(Two-Level Aggregate Structure)
- 图形存储模型:存储顶点和边的信息,有的支持添加注释,用于对事物建模,如社交图谱、真实世界的各种对象。IMDB(Internet Movie Database)站点的内容就组成了一幅复杂的图像,一般用于查找图形中断点的路径,或端点之间路径的属性。
5.NoSQL数据库分类:
6.NoSQL数据CAP和BASE:
- 传统SQL关系型数据的CAID:
- NOSQL关系型数据库的CAP:
CAP原理服从的原则:
- CA--> 传统Oracle数据库
- AP--> 大多数网站架构的选择
- CP--> Redis、Mongodb
PS:
- 分布式架构的时候必须做出取舍,只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。
- 一致性和可用性之间取一个平衡。
- 多余大多数web应用,其实并不需要强一致性。
- 因此牺牲C换取P,这是目前分布式数据库产品的方向
- 一致性与可用性的决择:
对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地:
- 数据库事务一致性需求:很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低, 有些场合对写一致性要求并不高。允许实现最终一致性。
- 数据库的写实时性和读实时性需求:对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。
- 对复杂的SQL查询,特别是多表关联查询的需求:任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。单表的主键查询,以及单表的简单条件分页查询,SQL的功能极大的弱化。
- NOSQL的BASE原理:
- BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。
- BASE其实是三个术语的缩写:
- 基本可用(Basically Available)
- 软状态(Soft state)
- 最终一致(Eventually consistent)
它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想获得这些指标,必须采用另外一种方式来实现。
- 分布式系统与集群:
分布式系统(Distributed System):由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。
因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。
集群:是一种用于集团调度指挥通信,主要应用在专业移动通信领域。该系统具有的可用信道可为系统的全体用户共用,具有自动选择信道功能,它是共享资源、分担费用、共用信道设备及服务的多用途、高效能的无线调度通信系统。
- 简单来讲:
- 1分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。
- 2集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。