海量数据处理之分库分表

海量数据处理之分库分表

查询慢,分库分表副作用,如何解决。

关系型数据库如: Mysql, sqlserver. 为了快速检索,采用B树或者其他索引技术。

表中数据越多,索引树的范围越大,磁盘读取越多,性能越低。

  • 读写分离,主数据库用于写入,读数据库(多个)用于对外提供查询,通过数据复制的方式将主数据库的数据同步到读库。该框架提升了数据库的读写能力,但对于主数据库的写入能力依然没法扩展。

  • 数据库分区 (分库分表)

  • 按**字段(列)**分区。每个库/表存储不同的字段,即schema 不同,垂直拆分
    拆成用户库,订单库,其他库。

  • 按 **数据记录(行)**分区。每个库、表的schema一致,但存储的数据不同,“水平拆分”。

  •  1. 水平拆分如何做到平均拆分,防止某一库压力过大。
    

userid 为分库分表键。采用hash去模的方式将数据散列到不同的库。
不是所有的都适合userid作为分库分表键 但是某个userid记录很多,可能会打爆一个数据库。 一般来说,将一段之间以前的数据归档(如userid 三个月之前的数据)存放到 非关系型数据库 HBase中。

  •  2.  分库分表之后要求每个查询的 where 字句中必须携带分库分表键,但并非每个查询都能携带分库分表键的。
    

按订单号分库分表。如果想查询某个买家的所有订单号,查询没有分表键,就去自动全表扫描。》》》 建立**“异构索引表”**,即采用异步机制将原表内的每次一创建或更新,都换一个维度保存一份完整的数据表或索引表,那空间换时间。 — 也就是说,订单库按照订单号hash取模之后存储,同时也是按照userid维度进行hash取模,再存储一份数据,那么想要获取某一userid的全部订单时,将userid作为分库分表键,就避免全表扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值