Dav*_* Xu 5 mysql scalability sharding
当我有一个庞大的复杂关系数据库,而这个数据库太大而无法放在一台机器上时,我会使用什么而不是SQL连接?我已经开始在许多机器上对数据库进行分片,但结果是,我无法再有效地进行连接.
有小费吗?
小智 9
有许多方法可以完成这项工作,一般的想法是以对相关数据进行分组的方式对数据进行分片.
作为一个简单(简单)的例子,如果你有一个Game数据库,你可以用相同的键(playerId)分割Player和PlayerGame数据.如果还有其他相关的表,您也可以添加它们,将其视为相关表的"分片树".然后,保证给定播放器的所有数据都在同一个分片中.然后,您可以在分片中执行联接,但不能跨分片执行内部联接.
另一种常见技术是将全局表复制到所有分片,这些分片通常是不经常更新的表,但在很多连接中使用.
通过这两种方法,您可以:
然后另一个技巧是分布式查询,您可能需要汇总来自多个分片的结果(例如,所有玩家的数量).
这是一份白皮书,更详细地描述了很多内容:
http://dbshards.com/dbshards/database-sharding-white-paper/
这种方法的关键是了解您希望如何查询数据.当您必须从不同的角度查询某些数据时,上面的答案也很有用.在这种情况下,您需要以两种(或更多)格式写入数据,并根据每种结构对分片进行分区.再次使用上面的简单示例,假设您需要查询所有玩家的单个GameInstance.现在你可以制作一个单独的"碎片树",其中GameInstance作为父级,PlayerGame作为子级,由GameInstanceId进行分片.现在该查询也将是有效的.
目标是尽可能多地进行单个分片操作,因为奇怪的分布式操作通常是分布式数据库集群的"邪恶".
| 归档时间: |
|
| 查看次数: |
2107 次 |
| 最近记录: |