06知识点

2019-04-07  本文已影响0人  Fix12138

数据库技术演进之路

NewSQL具备NoSQL扩展性,有具有传统关系型数据库ACID特性的分布式关系型数据库

传统关系型数据库分表实践

分库:用户库、商品库、交易库
分表:uid%1024

MySQL Scale Out

MySQL读写分离

MySQL Sharding

MySQL DB Proxy

Sharding

引发的问题(MySQL Proxy和DB Proxy代价)

使用NewSQL可以解决这些问题

分库

库的共享:大部分场景下读请求量远大于写请求量,但写请求重要性又高于读请求。为了避免读请求对写请求的影响,将读API和写API拆分成两个微服务,但底层共享同一个库
DB进程共享:一个MySQL里面好多库。

分表

MySQL数据量达到何时分表,与每行的数据量有关:

Partition Key的选择:

如何解决分表好多个字段查询?
比如一个行有两个字段uid和infoid
基因法:当uid是固定的,infoid是动态的,可以将uid和infoid的低4位在生成的时候保证一直,这样就可以都分到同一个表中。
当uid和infoid都是固定的,这样只能先按照uid分表,再建一张按infoid分表的映射表。

分库分表一定要结合业务需求来设计,如果没有业务需求无法设计合理的分库分表
比如有按照时间范围的搜索需求,就不应该用MySQL来解决,应该用搜索引擎比如ES来解决。

常用的数据库中间件组合:
ORM:MyBatis 3
Sharding: Sharding-JDBC/Sphere
Merge:result merge
DataBase Connection Pool:DBCP(apache)

传统关系型数据库高可用方案

平台架构:

主从切换:
提供虚IP,可以采用nginx、LVS等负载均衡,或者keepalive等工具。

整个高可用方案称作MHA

MySQL高可用架构之MHA

NoSQL数据库应用实践

MongoDB面向文档的NoSQL数据库
特性:

MongoDB副本集(replica Set)

支持的分片方案

应用场景

文档设计

Schema设计

锁机制

Mongo 2.6之前悲观锁,在内存中对数据结构修改时加锁
Mongo 3.0WT(存储引擎WiredTiger),MVCC机制,乐观锁lock-free并发控制

压缩算法

遇到问题

上一篇下一篇

猜你喜欢

热点阅读