(4)如何选择分区键 ?
首先要明白分区键的功能和影响,然后思考下随便选个分区键会产生什么问题?实际中应该根据业务需求来选择适用的分区键,避免跨分片查询,方便存取且尽量不降低存取性能。
查询维度是多样的,有时可能需要多个分区键,比如在做一个评论应用中,有需要根据用户ID来查询用户所有的评论,也需要根据文章ID查询所有的评论,我们按用户ID或文章ID分片都不是好方法,因为总有一种要跨分片查询,我们的做法是存两份,分别以用户ID和文章ID进行分表,以满足上述两种查询场景。
有些数据遍布在个分片,又需要频繁跨片查询,可以分析是否有其他等同策略。还是上面提到的评论应用,能够将一些信息抽象为整体数据,比如数量统计,可以抽取出单张公共表。
这部分的重点是“选择分区键的方法”、“多分区键”、“跨分片查询问题”、“跨分片数据一致性”。
(5)全局唯一ID的生成
全局唯一ID推荐几个优秀的资源,
1. 美团的分布式ID生成系统 https://tech.meituan.com/MT_Leaf.html
2. 阅文集团分布式ID (类snowflake方法) https://mp.weixin.qq.com/s?__biz=MzIxMzgxMjQ1Mw==&mid=2247483661&idx=1&sn=4e459c618a2169f994f62f28f2159eba&chksm=97b05487a0c7dd91e45cd2c9d0dcc837586ee2652abc9efb3252e69b1bd2d6b2bb450c8c2e58&mpshare=1&scene=2&srcid=0525IV9AydzO0CEN4CXkEFuk&key=cf192bba2f919fcb70ed66331b7f4f5d4c61927abd688c4674e6088b2743fb2e495a694189f8dab322e8030e8a9143b9932ed7851e58024d51807a665ab48b9c0bd8f176efa0b7383fe7e857d55eddb6&ascene=0&uin=MjM3ODQzNjgwMA%3D%3D&devicetype=iMac+Macmini7%2C1+OSX+OSX+10.11.5+build(15F34)&version=12020810&nettype=WIFI&fontScale=100&pass_ticket=iZnDMUQlGa2cTsRI6ffMQ%2B585Qs0ZJK0s9FedcMFAmailXPsFNG2IPQ3oF3mBt5o
3. 贝聊亿级数据库分库分表实践 https://zhuanlan.zhihu.com/p/27363448
4. 唯品会订单分库分表实践 http://www.infoq.com/cn/articles/summary-and-key-steps-of-vip-orders-depots-table
5. 大众点评订单分库分表实践 https://tech.meituan.com/dianping_order_db_sharding.html