架构设计—高并发下的数据存储方案

存储 存储软件
最常见的例子是读写分离,某个节点负责写入数据,然后将数据同步到其它节点,其它节点提供读取的服务,当两个节点出现通信问题时,你就面临着选择A(继续提供服务,但是数据不保证准确)或者C(用户处于等待状态,一直等到数据同步完成)。

数据存储,其实说的就是数据库,也就是在高并发的业务场景下,我们的数据库如何架构设计。

知道有哪些数据库

关系型数据库

是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据,几句简单的SQL语句就能快速的实现小规模数据的读写、查询统计,对于程序猿来说真是爽歪歪呀。

[[211234]]

MySQL

目前互联网企业基本都用它来做数据存储。愿意很简单,它是免费的,轻量级的,其他关系型数据库能做他他一样能做。用起来爽爽的。并且能基于Mycat的中间件的帮助,一样完成大规模数据的存储,满足高并发下的数据读写。关于MyCat,国内开源的项目,从它的版本更新计划,还是有很多让人值得期待的地方。

Oracle

应该说是***的关系数据库,容量大,数据安全。比如金融行业,实时交易系统较多,在对数据的联机事务处理(OLTP)上也就要求很高。但做大规模的数据存储,扩展性不好且价格昂贵。

SQL Server

如果还有人在用SQL Server,说明这个企业的信息化水平很Low。SQL Server几乎没人在用了。

NoSQL数据库

也叫是“Not Only Sql”,指的是非关系型的数据库。这类数据库主要有这些特点:非关系型的、分布式、开源的、水平可扩展的。

memcached-临时性键值存储

是一个自由开源的,高性能,分布式内存对象缓存系统。数据全部放在内存中,在架构设计中使用memcached能减少对磁盘数据的读写操作。

比如可以提高用户对空节点数据查询的性能,页面上查不到数据,用户还在狂点,我不可能不停的查边系统中的每个节点。需要对空节点数据进行缓存。

还有一个就是减少对数据库的读写,比如对查询***率很高的能否做缓存。对写操作能否所队列缓存。人家是对象缓存系统,所以啥对象都 是可以放的。

Redis-***性键值存储

Redis和memcached在功能上发挥的作用和使用场景基本是一样的。只是Redis更像是一个对象数据库,它不仅做内存对象缓存,还可以做对象磁盘缓存。也就是最终的数据是被放到了磁盘上的。功能上比memcached要丰富一些,在企业中Redis用的更多一些。

MongoDB面向文档的数据库

轻量的分布式文件存储系统,MongoDB的功能很强大,在大规模数据的读写方面不亚于HBASE。MongoDB对数据的存储是透明的。现在一般企业通过MongoDB存一下非格式的文件,比如图片,视频,各种文件等。MongoDB在数据查询上比HBase方面,但在数据分析处理上不及HBase。

HBase面向列的数据库

面向列的新型的数据存储方式,这也是HBase在超大规模数据量中能毫秒级读写数据的原因。超大的什么级别呢,“This project’s goal is the hosting of very large tables — billions of rows X millions of columns,billions of rows X millions of columns”一个表的数据能支持的数据结构是上亿行 乘以 百万列,这是HBase官方的描述。也就是说你一个HBase表没有上亿条数据,都对不起使用HBase。牛逼吧。哈哈。之前我们卡弗卡大数据课堂的一个学生亲自测过,确实可能达到上亿行 乘以 百万列的这个结构。

虽然HBase的维护成本比较高,但在数据分析上妥妥的,因为他是基于HDFS的,跟MapReduce、Hive、spark等都能很好的整合,达到数据的计算分析。

关系型数据库特点

优点:

  1. 保持数据的一致性
  2. 可以进行复杂查询,操作简单。
  3. 通用并且技术成熟。

缺点:

  1. 数据读写必须经过sql解析,大量数据高并发下读写性能不足。
  2. 对数据做读写,或修改数据结构时需要加锁,影响并发操作。
  3. 无法适应非结构化存储。
  4. 扩展困难。
  5. 昂贵、复杂。

NoSQL数据库的特点

优点:

  1. 高并发,大数据下读写能力较强。
  2. 基本支持分布式,易于扩展,可伸缩。
  3. 简单,弱结构化存储。

缺点:

  1. 不能操作复杂的查询。
  2. 事务支持较弱。

理解分布式系统的CAP理论

前面我们说了关系型数据库和NoSQL数据库的种类以及他们的特点。如何能很好的在实际项目中的合理的应用,我们应该要了解CAP理论。

CAP的含义是Consistency, Availability, Partition-tolerance也就是一致性、可用性以及分区容错性。

  1. Consistency:一致性(C)
  2. Availability:可用性(A)
  3. Partition tolerance:分区容错性(P)
  • 一致性在多并发访问更新过的数据时,提供给用户的数据是否一致。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
  • 可用性某一节点的服务器挂了,集群整体还能响应客户端的读写请求。
  • 分区容错性如果由于节点通讯的问题不能达成数据一致性,必须在一致性和可用性中做出选择。

所以说任何分布式系统只可同时满足二点,没法三者兼顾。例如:

  • CA应用:传统上的关系型数据库(RMDB).
  • CP应用:基于HDFS的牛叉的HBase分布式数据库
  • AP应用:面向文档的分布式系统的数据库MongoDB。

那么我们说CAP理论提出就是针对分布式数据库环境的,所以,P这个属性是必须具备的。P就是在分布式环境中,由于网络的问题可能导致某个节点和其它节点失去联系,节点之间互相无法知道对方的状态,这在分布式环境下是非常常见的。所以就形成了P(partition)。那么当P发生时,你要么考虑A(Availability),失去联系的节点依然可以向系统提供服务给客户端,只不过它的数据就不能保证是同步的了(失去了C(Consistency)属性),但至少服务及时做了响应。要么考虑C,选择一致性C(Consistency)为了保证数据库的一致性,我们必须等待失去联系的节点恢复过来,在这个过程中,那个节点是不允许对外提供服务的,这时候系统处于不可用状态(失去了A(Availability)属性)。

最常见的例子是读写分离,某个节点负责写入数据,然后将数据同步到其它节点,其它节点提供读取的服务,当两个节点出现通信问题时,你就面临着选择A(继续提供服务,但是数据不保证准确)或者C(用户处于等待状态,一直等到数据同步完成)。

AP和CP该如何取舍呢? 我觉得可以根据不同的业务场景做不同的处理。CP对系统的一致性要求较高如ERP系统,OA系统。AP系统可以允许不一致。比如微博系统。

结论

懂得CAP理论,在实际业务需求中我们能很好的来做数据的存储的架构设计。

所以,高并发下的大数据读写,尽可能的交给NoSQL,HBase或者MongoDB数据库。虽然他们不能像关系型数据库那样很爽的让你查询,但他们确实彪悍。因为专业就是干这个的。对于强事务的数据操作,NoSQL数据库就不要跟人家抢。当然,MySQL不是不好,表数据超过500W,就不要像几十条数据那样的修改、删除。这时候应该考虑是否需要读写分离,从业务上是否需要考虑分割哪些数据经常修改,哪些数据会频繁被查询,是否有大量的数据写入,是否有大量随机的数据读取。

看似操作差不多,但在高并发的大数据面前,这些都是我们需要慎重考虑的。

责任编辑:武晓燕 来源: 数据轩
相关推荐

2020-10-30 09:33:01

分库分表数据库

2021-04-28 08:52:22

高并发架构设高并发系统

2014-08-08 13:30:44

Nginx

2013-01-30 10:12:24

NginxNginx优化高并发

2019-11-08 08:40:29

Java高并发流量

2022-08-31 17:20:47

value架构优化

2023-01-11 17:29:12

数据库分库分表

2017-11-24 08:32:04

架构设计存储

2019-10-30 16:54:08

golangredis数据库

2018-01-24 09:35:12

高并发数据库设计水平切分

2019-03-18 05:02:30

高并发京东架构

2022-06-12 06:45:26

高并发防重

2023-10-13 08:11:22

2022-03-31 17:38:09

高并发系统架构设计负载均衡

2012-09-19 13:46:37

存储存储设计快速表态

2019-09-30 08:37:38

Nginx高并发HTTP

2020-06-09 21:08:24

Nginx高并发架构

2023-02-03 15:16:42

SpringHystrix

2020-07-15 08:14:12

高并发

2019-06-25 09:32:16

Redis海量数据高并发
点赞
收藏

51CTO技术栈公众号