没有良好的分区功能时进行分片

时间:2013-11-27 03:13:25

标签: sql database sharding

编辑:我看到一些RDBMS(Postgres:http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html)的分区功能提供了我正在寻找的大部分功能。我仍然对管理分区的特定算法和最佳实践感兴趣。

水平扩展关系数据库通常是通过将数据分片到 n 服务器上来实现的,这些服务器基于将数据分成大致相等的预期大小的 n 桶的某些功能。只要所有查询都包含分片键并且数据分别分成相互无关的集合,这就可以维护高效且有用的查询。

具有适合上述属性的任何函数时,横向扩展关系数据库的最佳方法是什么?

例如,在多租户情况下,一些租户可能几乎不会产生任何数据,有些可能产生一个完整服务器的价值(或更多),并且无法知道您想要哪个和几乎所有的查询是在租户的整个数据集上。

我找不到很多关于此的文献。我能想到的最好的解决方案是:

  • 最初根据一些天真的等分功能划分为 n 组。
  • 当任何服务器被填满时,增加n(或增加一些其他数量/因子),然后重新分区数据。
  • 当租户占用服务器空间的百分之几以上时,将其移至自己的服务器,并为分区功能添加一个特殊情况。

这非常复杂,需要在应用程序分片层中使用大量复杂的逻辑(更不用说在服务器之间复制大量数据),但似乎半自动化并不难,如果你小心了,你可以通过一种最小化从一台服务器到另一台服务器的数据重定位的方式来改变分片功能。

这完全是在错误的树上咆哮吗?

0 个答案:

没有答案