在互联网应用中,数据爆发式的增长,实际上软件架构的本质就是对数据的保护。对数据的操作可以归纳为三类:读、写和检索。
跟着网站的流量越来越大年夜,数据量也爆发式的增长,网站响应越来越慢,办事器经常宕机。传统的关系型数据库已经不克不及知足流量和数据的爆发式增长。于是根据不合的营业需求,出现了很多不合的数据库。
对于数据库的选型,ACID是重要的┞峰酌指标,如不雅对ACID请求很高,应钙揭捉?择关系型数据库。其次部分对一致性请求不高的,写并发异常大年夜的可以推敲其他的nosql数据库。然则有的营业并发异常高,对ACID请求也异常高,则对营业数据和数据库进行拆分。
根据数据库的类型划分。有关系型数据库:mysql,oracle,sqlserver,postgresql等。nosql数据库:mongodb,hbase,cassandra,redis,CouchDB,Riak,Membase等。
HBASE:支撑数十亿行,数百万列。对于海量数据的宽表,面向列式存储,无schema,可随便率性扩大列。
根据数据库的用处划分。有缓存数据库:redis,memcached,h2db等,日记数据库:kahadb等。k-v型数据库:leveldb,redis等。
检索型存储中心件有:elasticsearch、solr、Lucene等。
传统的关系型数据库(RDBMS)是用处最广泛也是用的最多的数据库。关系型数据库是强事物一致性(ACID),应用比较早,技巧相对成熟,萌芽可以根据字段,以及表示各个数据对象之间的关系。在CAP理论中实现的是CA。没有P分区性,单点瓶颈是硬伤。
当关系型数据库越来越成为瓶颈时,为解决单点瓶颈就义CAP属性中的C,出现了nosql数据库。针对某些特别的应用处景,出现了非关系型数据库。如:nosql,缓存等。以下针对不合的营业场景阐述各个数据库的特点。
以下对各类营业场景应当若何优化和存储选型。
一、读多写少
当拜访量越来越大年夜,数据量还不是很大年夜的时刻。也就是写不是瓶颈,而读成为重要的瓶颈。一是增长大年夜库分担读的压力,另一个是在数据库和应用体系之间加一层缓存memcache,redis。增长缓存之后,能抗住很多压力,大年夜大年夜降低了数据库的读请求。
在互联网应用中,对于一般的量级,免费的关系型数据库mysql、postgresql是首选。支撑事物,稳定性和成熟度比较好。
二、读多写多
高并发场景中,对数据库的操作往往提如今高并发读和高并发写。当读和写都成为瓶颈时,这时采取的筹划有:
1)对数据库进行横向和纵向扩大。按营业划分,把一个数据库实例扩大成多个实例。按数据分片,把单表大年夜数据量,水等分片成多个小表。
2)应用内存表负载压力。常见的内存表有:redis开启aof功能。营业数据要持久化落盘。不然过程一旦重启,内存数据就会损掉。
redis:是有硬盘存储的内存数据库,可以支撑Master-Slave复制,其可以供给并发量远高于关系型数据库。支撑的数据构造:K-V,K-Sets,K-Queue,K-Hash。可实用于高并发读写营业场景,但局限于其数据构造,不克不及做复杂萌芽,只能以Key键值为基本数据构造操作。
memcachedb:是基于memcache添加了BerkeleyDB存储机制和主辅复制而来。支撑的数据构造只要K-V构造。可实用于高并发读写营业场景,同样只局限于其数据构造,不克不及做复杂萌芽,只能以Key键值为基本数据构造操作。
MongoDB:支撑Master-Salve复制,无schema,json构造。字段可以随便率性扩大,可以建立字段索引和全字段索引。可以对随便率性字段建立索引萌芽。数据量越来越大年夜时,是吃内存的大年夜户,数据一致性问题会越来越严重。如不雅对数据一致性请求不高的读多写多营业,可以推敲应用此数据库存储。
三、读少写多
海量数据的写入。如货车app中的gps路线轨迹数据,天天的写入库的数据量上亿条。如斯巨大年夜的写入量用关系型数据库显然是不合适的。关系型数据库固然可以采取批量导入的方法加强写入才能,但其强迫落盘,对磁盘IO是影响重要身分。cassandra和habase其先写内存,异步落盘机制对磁盘IO消费更低。
Cassandra:java开辟,构造简单。其数据采取分片机制,副本备份与容错复制。面向列式存储。内存写入与异步刷盘的机制,使其在写操作远高于读操作场景中,也能轻松应对。
四、读少写少
在小体系,营业量低、数据量少的体系,对读写操作都比较少,当然是怎么快就怎么来。选用mysql免费数据库是最合适的选择。
五、复杂前提检索
关系型数据库平日应用b+tree索引,非关系型数据库如cassandra应用LSM构造索引。所有的索引多列复杂前提萌芽的检索效力远远低于索引引擎。
solr:萌芽快,然则更新索引速度偏慢。重要应用于那种对数据的及时性请求不高的营业。
elasticserach:更新速度比solr快,然则萌芽速度相对solr较慢。重要应用于及时索引萌芽的营业。
总结:
1)对ACID有强请求营业一般应用的数据存储采取关系型数据库,如mysql,postgresql、oracle、sql server等。
常用开源的搜刮引擎有luence,solr,elasticsearch,sphinx等。
2)读多写少的场景,应用非关系型数据库Cassandra、hbase、MongoDB等。
3)缓解高并发读对数据库造成的读瓶颈,应用缓存:memcached、redis等。
4)复杂的数据检索,应用外置索引:elasticsearch、solr等。
【编辑推荐】
- 浅谈分布式存储体系中的数据一致性请求
- 为什么石油和天然气的大年夜数据家当须要扩大NAS存储
- 面向海量范围与高度扩大偏向转化的二级数据存储
- 下一代云存储体系技巧白皮书
推荐阅读
如今,跟着数据中间的数据敏捷增长,以往的存储架构已不再知足需求。数据中间须要一个新的存储架构。第一个存>>>详细阅读
本文标题:如何做数据存储架构技术选型?
地址:http://www.17bianji.com/lsqh/38384.html
1/2 1