暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NoSQL演变历程

testDemo 2019-06-13
584

NoSQL演变历程:


1、关系数据库

网站访问量不大,用单个数据库可以应对。


2、Memcached+Mysql (用缓存缓解读压力)

       随着数据量、网站的访问量暴增,大部分网站都出现性能问题,开始比较流行的是通过文件缓存的方式缓解数据库压力,但多台web服务器不能够共享缓存,并且I/O操作非常之多。

       于是就出现了Memcached技术,这是一个独立的分布式内存缓存服务器,能够为多台web服务器提供共享的缓存。


3、Mysql主从复制(实现读写分离,缓解读写压力)

       Memcached只能缓解读的压力,于是出现Mysql 主从复制技术

主从复制:是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。假设有4台服务器,1主3从,当新增数据至数据库服务器的时候,那么同时复制此数据进入到从数据库服务器中。数据复制是为了容灾备份,缓存备份,保证数据的完整性。

       读写分离:增删改、读分别从不同的数据库服务器中进行。分工明确,再结合缓存可进一步提升性能。


4、分表分库 + 水平拆分 + MySQL集群

       在主从复制、读写分离、Memcached技术的使用后,这时性能在读方面得到很大提升,这时增删改的主数据库由于数据量持续猛增,开始出现瓶颈。由于myisam使用表锁,在高并发下会出现严重的锁问题,大量的高并发Mysql应用开始使用InnoDB引擎代替myisam,由于数据量的指数级增长,只能继续对架构进行演变。与此同时,开始流行使用分库分表来缓解写压力和数据增长的扩展问题。这个时候,Mysql推出了表分区。


分库分表:把原本存储在一个库的数据分块存储到多个库上;把原本存储于一个表的数据分块存储到多个表上。


分库分表分为:垂直切分、水平切分。

垂直切分:将表按照功能模块、关系密切程度划分出来,部署到不同的库上。

水平切分:当一个表中的数据量过大时,我们把表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。


5、NoSQL

NoSQL数据库在以下的这几种情况下比较适用:

1、数据模型比较简单;

2、需要灵活性更强的IT系统;

3、对数据库性能要求较高;

4、不需要高度的数据一致性;

5、对于给定key,比较容易映射复杂值的环境


NoSQL数据库的四大分类表格分析

分类

Examples举例

典型应用场景

数据模型

优点

缺点

键值(key-value)

Tokyo Cabinet/Tyrant,

Redis,

Voldemort,

Oracle BDB

内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。

Key 指向 Value 的键值对,通常用hash table来实现

查找速度快

数据无结构化,通常只被当作字符串或者二进制数据

列存储数据库

Cassandra, HBase,

Riak

分布式的文件系统

以列簇式存储,将同一列数据存在一起

查找速度快,可扩展性强,更容易进行分布式扩展

功能相对局限

文档型数据库

CouchDB, MongoDb

Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)

Key-Value对应的键值对,Value为结构化数据

数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构

查询性能不高,而且缺乏统一的查询语法。

图形(Graph)数据库

Neo4J, InfoGrid, Infinite Graph

社交网络,推荐系统等。专注于构建关系图谱

图结构

利用图结构相关算法。比如最短路径寻址,N度关系查找等

很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

目前接触过 Redis、Neo4J。



往期回顾




长按关注





文章转载自testDemo,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论