用于分区大型分层数据集的数据库模式

时间:2009-11-26 21:13:20

标签: sql sql-server hierarchical-data partitioning

是否有分区大量分层数据的最佳实践/模式或一般建议?

想想一个特定国家的所有人的数据库,并跟踪谁与谁合作。单独考虑“人”实体,如果要保留关于每个人的大量数据,那么自然的方法似乎是将人口划分为多个水平分区。然而,关系(谁与谁合作)可以(并将会)跨越partitionsa。随着数据变得越来越多地交叉链接,对这些关系进行聚类(即,使用雇主例如作为分区密钥以最小化交叉分区引用)将不可行。这种群集还会导致不平衡的分区,这会妨碍可扩展性。

我现在很困难,所以对任何提供的帮助都会非常感激。

感谢。

1 个答案:

答案 0 :(得分:1)

看来你有三个问题:

  1. 存储员工数据(不包括关系/层级)
  2. 雇主到员工等级(可以随时间变化)
  3. 员工到员工的工作经历(再次,随着时间的推移而变化)
  4. 依次解决每个问题:

    1. 员工数据:可以使用唯一ID进行分区,并使用姓氏+给定名称+出生日期的备用键。通过id均匀分布或者区域/区域等其他信息进行分区(尽管这意味着某些分区会比其他分区更热)

    2. 雇主/员工层次结构:需要一个辅助表来定义它,允许随时间变化。例如。 Employee id, Employer id, start date, end date并按employee id + employer id键入,然后以employer id + employee id方式返回。我建议您阅读以下内容:http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back,它可能有适合您的数据大小的想法。

    3. 员工/员工工作经历:需要另一个与#2非常相似的辅助表,交叉引用员工以及他们一起工作的时间。例如。 employee1 id, employee2 id, start date, end date,至少会被每个ID编入索引。

    4. 这里的关键是不要尝试将关系/层次结构放在员工数据表中 - 它会很慢并限制您需要的链接(特别是链接随时间变化)。