一个项目架构的发展
单机
互联网项目初期相对较为简单,数据请求量相对不高,很多都是单机mysql+缓存就可以支撑,这是项目的初期结构,随着数据量原来越大,单机的优化,数据库的分库分表满足不了的时候,项目架构需要重构。
缓存+负载均衡+集群
项目到这个时候,我们需要增加服务器的数量,增加数据库的数量,用来均衡请求,加入缓存以快速响应用户请求内容,减轻底层io压力,以提高我们项目的健壮性。
web2.0+大数据
大数据时代的到来,对我们的项目要求更高。
大数据时代的3V:主要是描述问题的
- 海量Volume
- 多样Variety
- 实时Velocity
互联网需求的3高:主要是对程序的基本要求
- 高并发
- 高可拓
- 高性能
包括更多的资源流处理,即时通讯,社交关系,热点数据等等,单纯的mysql+缓存架构,很难以实现这些要求。
NoSql数据库(Not Only SQL)
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
NoSQL特点
易扩展
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。
大数据量,高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。
灵活的数据模型
NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
高可用
NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。
NoSQL数据库在以下的这几种情况下比较适用:
1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境。
和传统RDBMS 的对比
传统的RDBMS
-- 结构化组织
-- SQL
-- 数据和关系存在单独的表中
-- 有数据操作定义语言
-- 严格的一致性
-- 基础的事务
NoSQL
-- 不仅仅是sql和数据
-- 没有固定的查询语言
-- 多种存储结构 键值对存储,列存储,文档存储,图形数据库(社交关系)
-- 最终一致性
-- CAP定理和BASE(异地多活)
-- 高性能,高可用,高可拓
电商项目中的RDBMS和NoSQL的结合
以一个商品为中心,可以见到它们是如何结合使用,以呈现出高性能,高可拓的架构。
1、商品的基本信息
名称、价格、厂家这些信息,使用Mysql存储 + 加上缓存层Redis 、Memcache缓存热点数据
2、商品的描述,评论
使用文档型数据库 MongoDB
3、商品的图片
分布式图片系统 FastDFS ,阿里云OSS等
4、商品的关键字
搜索引擎 solr , elasticsearch ,ISerach 等等
5、商品热门的波段信息
内存数据库
Redis 、Tair、Memcache
6、商品的交易、支付接口
第三方应用
以上只是一个小例子,事实上使用场景还用很多很多
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度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
总结:
web2.0的时代,大数据高并发高可用架构已经是一个热门的话题,其中NoSQL绝对也是其中重要的一环,在架构中也时常使用,值得我们去学习。