NoSQL
选用场景:
1.待处理的数据量很大或者对数据访问的效率要求很高,从而必须将数据放在集群上(如果由于数据的量级或者访问效率的原因要使用集群方式来解决,那么可以优先考虑NoSQL);
2.想采用一种更为方便的数据交互方式来提高应用程序的开发效率;
NoSql数据类型
NoSql中的数据是使用聚合模型来进行处理的。
聚合模型主要分为:KV键值对,BSON,列族,图形等几种方式
KV键值对:就是我们平常使用的map那样的存储模式
BSON:在MongoDB中常用的一种数据类型,是一种类json的一种二进制形式的存储格式,简称binary json,它和json一样,支持内嵌的文档对象和数组对象
列族:按列存储数据。最大的特点是方便存储结构和半结构化数据,方便做数据压缩,对针对某一列或者是某几列的查询有非常大的io优势
图形:不是放图形的,放的是关系,比如:朋友圈社交网络,广告推荐系统等,专注于构建关系图谱
NoSql数据库的分类
KV键值对
临时性键值存储:Memcached,Redis
永久性键值存储:ROMA,Redis
应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等
数据模型:Key指向Value的键值对,通常用HashTable来实现
优点:查找速度快
缺点:数据无结构化,通常只被当做字符串或者是二进制数据
面向文档的数据库:MongoDB,CouchDB
Mongodb是一个基于分布式文件存储的数据库,由c++语言编写。 为web应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据中功能最丰 富,最像关系数据库的
应用场景:WEB应用(与key-value类似,value是结构化的,不同的是数据库能够了解到value的内容)
数据模型:Key-Value对应的键值对,Value是结构化的数据
优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
缺点:查询性能不高,而且缺乏统一的查询语法
面向列的数据库:Cassandra,HBase
应用场景:分布式的文件系统
数据模型:以列簇式存储,将一列数据存储在一起
优点:查找速度快,可扩展性强,更容易进行分布式扩展
缺点:功能相对局限
面向图形的数据库:Neo4J,InfoGrid
应用场景:社交网络,推荐系统等,专注于构建关系图谱
数据模型:图结构
优点:利用图结构相关算法。比如最短路径寻址,N度关系查找等等。
缺点:很多时候要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。
数据分布方式:
分片
复制(主从复制;对等复制)
会话一致性:
黏性会话:绑定某一个节点的会话(会话亲和力),只要某节点具备“照原样读出所写内容的一致性”,那么与之绑定的会话就都具备这种特性,缺点(降低负载均衡器的效能);
版本戳:确保同数据库的每次交互操作,都包含会话所见的最新版本戳,服务器节点在响应请求之前必须保证它所含有的更新数据包含此版本戳;
映射-化简:
映射-化简是一种在集群上执行并发计算所用的一种模式;
“映射”任务从聚合中读取数据,将之缩减为相关键值对,由于每次只能读取一条记录,所以可以在存放记录的节点上并发执行;
“映射任务”会生成许多具备同一关键字的值,而“化简任务”则将它们简化单一的输出值。每个“化简函数”只操作与单个键相关的映射结果,所以多个“化简函数”可以依据关键字执行并发 化简;
输入数据与输出数据形式相同的多个“化简函数”可归并为“管道”,以提高并发执行能力,并减少所需传输的数据量;
若某个“化简操作”的输出是下一个“映射操作”的输入,那么就可以用“管道”组合“映射-化简”操作;
如果需要广泛使用“映射-化简”计算的结果,那么可将其存储为“物化视图”;
可用增量式“映射-化简”操作更新“物化视图”,这样只需计算视图中发生改变的那部分数据即可,不需要把全部数据都从头算一遍;
mongoDB:
mongo.slaveOk():设置slaveOk选项后,可以于从节点中读取数据,该参数可以设置整个连接,数据库,集合,也可以针对每项独立的操作;
writeConcern:可以设置让写入操作必须等待所写数据同步至磁盘或传播到至少两个从节点后,才能返回,将writeConcern设为REPLICAS_SAFE,即可确保数据能写入主节点及某些从节点中;
适用案例:事件记录、内容管理、博客平台、网站分析、实时分析、电子商务
列族数据库:
标准列族:每个列族都可以与关系型数据库的“行容器”相对照:两者都使用关键字标识行,并且每一行都由多个列组成。列族数据库的各行不一定具备完全相同的列,并且可以随意向其中某行加入列,而不用添加到其他行;
超列族:列中包含一个由小列组成的映射表,包含名称和值,值是一个由小列组成的映射表,也可视为“列容器”;
模式迁移:
关系型数据库:可将历次模式变更及其数据迁移操作保存于“版本控制序列”;
NOSQL数据库:增量迁移