浅谈数据库

数据库

数据库是一个软件的灵魂。软件 = 设计 + 程序 + 数据
那数据库需要注意什么呢?

数据库的索引

B+ Tree
为什么是B+ Tree 呢?首先要从B+ Tree 的数据结构考虑,(读者先行了解B+ Tree 的结构,如果理解困难,笔者再开一章另行解释)
因为B+ Tree 的结构,再基于数据库查询是一页一页(磁道)的,所以会以很小的复杂度查询到数据。
新增数据在索引建立方面,也会更加便捷。

推理

如果表字段有大文本,需拆出新表关联存储。不然将降低原表查询效率,因为大文本内容,使得一页数据量减少,必然增加寻找时间
联合索引 最左原则,因为联合索引的数据结构,类似K-V 结构, 这样理解的话,K的查询会很快,V的查询会遍布在多个K中,必然会走全表检索。
左like, 同理可得出为何左like能够走索引,因为左like 可以确定大致的范围,检索范围有限,如果不是左like, 那么检索时无法确定K的范围。

数据库分表

单表体量达到一定程度,整个性能必然会降低。那有哪些解决方案呢?
分区/分表/分库

分区

分区不需要考虑表结构的变更,只需要对表内容按照一定的逻辑进行执行即可。
分区逻辑上是一个表,但是物理上可能已经在不同的磁盘上存储。
索引不会影响原有查询逻辑

归档

归档的对象是冷热数据,不是所有的数据都是热数据,有些一年以上,低频访问的数据,不给用户查询,但提供客服查询功能,尽最大可能提高日常数据库查询效率

分库/分表

是建立在分区等手段已经不足以优化整体性能的基础上的手段,但有一定的运维成本,需要数据迁移。
需要考虑拆分多少个库?什么时候拆库?拆库的逻辑是什么?等等
一般考虑日常用户等增长情况,会一次性拆分为32 库 ✖ 32 表,如果计算还觉得不行可以拆分为64 库 ✖ 64 表

分库/分表的后续

分库后,是不是就万事大吉了呢?
显然不是,需要考虑分库后,查询怎么办?事务怎么办?
基于MyCat 的PXC 高可用方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值