目录
如何分好库分好表很重要,关系到以后的查询效率
如何分?
一般会有个分片键,sharding column。在之前的文章中已经有介绍类似的做法:取模,以及按照范围去分类。
第一种方式
取模:数据会均匀,但是不方便查询
按范围去分:容易查询,却存在数据热点。
解决方案
先按范围去分,然后分库,(方便查询)再取模,分表(数据均匀)
缺陷
比如按商家这个范围去分,我们可以根据商家id再hash取模,找到某个库,但是你还要在很多张表进行查找哦。相当慢,omg
而且只适用只有一个范围条件,多个基本就处理不了。
第二种方式
看了飞哥的文章,真的是,omg,我的天,大神级人物,写的文章就是牛
看到里面提到了两个方法,总结起来就是冗余。
解决方案
No.1
我的天,基本就是冗余了你所有想查询的字段,比如冗余商家id,订单id等等,如果你要查询的话可以到不同的表进行查询。
确实很方便,就是感觉冗余的有点high多,哈哈
No.2
有没有设曾相识的感觉,就是索引和数据分开。也有那种es倒排索引的feel。
总结
基本都是冗余索引,方便查询对应的id进行特定的查询,而不是全表查询。维护冗余的代价也是高的,比如修改,删除等等,这些都得跟着改。
复杂查询
像飞哥文章中提到的,像淘宝那种n多个条件查询的。这时需要借助es强大搜索能力,那么储存呢?可以用到hase数据库。
结语
任何技术脱离业务来谈都是扯淡,所以大家要找到合适的方案来搞,而不是觉得它很牛逼所以用了这个技术。像我们刚刚说的es+sc+hbase,其开发到维护成本都是very high