分布式数据访问基础

数据处理分类

海量数据处理,按使用场景,主要分为两类:

  • 联机事务处理OLTP(On-line Transaction Processing)

 类似实时处理

  • 联机分析处理OLAP(On-line Analytical Processing)

 类似离线分析

两者对比如下:
imges

常用数据库分类

传统数据库:

  • oracle
  • mysql
  • ms sqlserver
  • db2

NoSQL数据库:

  • 临时性键值存储:redis、memcached
  • 永久性键值存储:ROMA、Redis
  • 面向文档存储:MongoDB、 CouchDB
  • 面向列存储:Cassandra、HBase

两类数据库对比:
imges

分库分表

对高并发、大数据场景下的各种问题,我们有一个很朴素的处理思想分而治之

分库分表是面向高并发、大数据量的背景下数据访问的一种解决方案

分库分表的目的:分散单台设备负载压力

在实际生产经验中,对于单表:

  1. 几万到百万级数据,使用常用的关系型数据库就能拥有很好性能
  2. 300万左右级别,oracle可以很好胜任,包含比较糟糕的表设计
  3. 当达到600万+数据量,传统数据库出现较明显性能降低现象,通过优化表结构、数据库设计,sql优化也可以较好解决问题
  4. 当数据量到800w-1000w+,紧紧通过一些优化措施已经不能解决数据访问性能问题,这个是由于单台机器的IO,CPU等硬件资源的制约,这时候就需要进行单机节点到多机节点的分布式处理

分库分表的基本思想:数据切分

两种切分模式:

  • 垂直(纵向)切分

 一般单表字段不能多于255个

 多字段单表,可根据业务字段分类,拆分成多表,分布在多个不同机器

 多个不同表,拆分到不同的机器(数据库)上

  • 水平(横向)切分

 同一张大量数据的表,根据某种条件拆分成多份数据,分布在多个机器(数据库)上

两种模式可单独进行,也可以同时使用,根据实际需要。

两种切分模式比较:
imges

分库分表组建有哪些

OneProxy 收费 有条件的话,可以试试

github开源项目:

atlas、cobar、tddl、oceanus长时间无更新,社区不活跃不推荐

vitess:YouTube开源项目、英文不是障碍推荐

Sharding-JDBC:社区较活跃,现已作为Apache开源项目 属于JDBC驱动版直接应用集成,也有Sharding-Proxy版本,推荐

mycat:社区活跃,属于Proxy版本,推荐

选用驱动型和Proxy型,根据实际取舍

JDBC 驱动版的优点:

  1. 轻量级,仅仅是JDBC增强,不包括 HA、事务以及数据库元数据管理
  2. 开发的工作量较小,无需关注NIO,各个数据库协议等
  3. 运维无需改动,无需关注中间件本身的 HA
  4. 性能高,JDBC 直连数据库,无需二次转发
  5. 可支持各种基于 JDBC 协议的数据库,如:MySQL,Oralce,SQLServer

Proxy 版的优点:

  1. 可以负责更多的内容,将数据迁移,分布式事务等纳入 Proxy 的范畴
  2. 更有效的管理数据库的连接
  3. 整合大数据思路,将 OLTP 和 OLAP 分离处理

目前常用的分库分表中间件对比:
images

posted @ 2021-01-21 16:56  刘66  阅读(70)  评论(0编辑  收藏  举报