是否有分区大量分层数据的最佳实践/模式或一般建议?
想想一个特定国家的所有人的数据库,并跟踪谁与谁合作。单独考虑“人”实体,如果要保留关于每个人的大量数据,那么自然的方法似乎是将人口划分为多个水平分区。然而,关系(谁与谁合作)可以(并将会)跨越partitionsa。随着数据变得越来越多地交叉链接,对这些关系进行聚类(即,使用雇主例如作为分区密钥以最小化交叉分区引用)将不可行。这种群集还会导致不平衡的分区,这会妨碍可扩展性。
我现在很困难,所以对任何提供的帮助都会非常感激。
感谢。
答案 0 :(得分:1)
看来你有三个问题:
依次解决每个问题:
员工数据:可以使用唯一ID进行分区,并使用姓氏+给定名称+出生日期的备用键。通过id均匀分布或者区域/区域等其他信息进行分区(尽管这意味着某些分区会比其他分区更热)
雇主/员工层次结构:需要一个辅助表来定义它,允许随时间变化。例如。 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,它可能有适合您的数据大小的想法。
员工/员工工作经历:需要另一个与#2非常相似的辅助表,交叉引用员工以及他们一起工作的时间。例如。 employee1 id, employee2 id, start date, end date
,至少会被每个ID编入索引。
这里的关键是不要尝试将关系/层次结构放在员工数据表中 - 它会很慢并限制您需要的链接(特别是链接随时间变化)。