Skip to content

Latest commit

 

History

History
24 lines (15 loc) · 1.44 KB

File metadata and controls

24 lines (15 loc) · 1.44 KB

关于分库分表思路的工作总结(3)

前面两篇提到的处理思路虽然能解决一些问题,但场景还是有些窄,例如,有时候我们非分表字段的查询不止一个, 可能是几个,这时候在分表key中嵌入某个非分表key的思路就不可行了,只能每次去所有分表都查一次了。 那除此外,有没有别的思路呢?


空间与时间的权衡

在编程的世界里,尤其是学习算法和数据结构时候,到处都会看到用时间换空间,用空间换时间的例子。 例如 hashMap就是一个典型的用数组+链表来动态调节空间时间比例的数据结构。

在面对多个非分表字段查询的业务场景的时候,我们也可以用空间来换更少的查询时间,把之前提到的 Map映射法id生成嵌入法综合起来,总结如下:

  • 对于查询流量大的字段,优先考虑作为分表key,或者嵌入在分表key二进制位中。
  • 对于多个非分表字段的查询情况,可以冗余几个 该字段到分表字段的 Map映射表。查询时候先从Map表定位到分表key, 再去对应表查。
  • 并行去所有表批量用某个字段多个值查的时候,最好先把能落在同个表中的值,做个分组聚合,sql替换成in ().以减少不必要的消耗。
  • 业务上的查询要求不是很实时和严格一致的,或分页排序条件复杂的,可以用搜索引擎来代替。