数据库架构设计需要满足哪些
数据量太大一般怎么办?
-水平拆分
引入分片之后,需要查看哪个数据库的数据,路由规则有如下几种
-范围(range)
.各库的压力不均匀
-哈希(hash)
.迁移比较麻烦(一致性hash算法)
-统一路由服务
.每次访问数据库前多查询一次数据库
分组
互联网公司一般都会使用"分组+分片"
数据库架构要设计那些,需要满足哪些条件?
-数据的可用性
-提高数据的读性能
-保证一致性
-扩展性
如何保证可用性?
-思路:冗余
-副作用:一致性问题
如何保证数据库"读"高可用?
-冗余读库
-副作用:读写延迟,会造成数据不一致
如何保证"写"高可用?
-采用双主互备
-副作用:双写同步,可能会造成数据冲突。(自增Id冲突)
阿里云号称可以做到"高可用",他是怎么做的?
-双主同步
-双主,但只有一个住提供读写,另外一个待命。master1挂了,backup-master顶上,通过虚拟IP漂移。
如何扩展读性能?
-增加索引
.写库不增加索引
.读库建立索引
-增加从库
.从库多了,同步就慢了
.同步一慢.数据不一致的可能性就大了
-增加缓存
如何保证一致性?
主从数据库的一致性,有如下的解决方法
1.中间件
如果某一个key有写操作,在不一致时间窗口内,中间件会将这个key的读操作也路由到主库上。
2.强制读主
“双主高可用”的架构,主从一致性的问题可以得到大大的缓解。
还有一种不一致,是DB和缓存之间的不一致。