2009-11-26 55 views
1

是否有分割大量的分层数据的任何最佳pratices /模式或一般性的建议?数据库模式的大分区分层数据集

的,比方说,在特定国家和跟踪谁曾与谁合作所有的人的数据库思考。如果要孤立地考虑“人”实体,如果要保存每个人的大量数据,那么自然的方法似乎是将人口划分为多个水平分区。然而,(与谁一起工作的)关系可能(并且将会)跨越分区。随着数据变得越来越交联,这些关系上的聚类(例如,使用雇主作为分区键来尽量减少交叉分区引用)将不可行。这种聚类也会导致不平衡的分区,这会妨碍可伸缩性。

我而停留的权利,所以会针对所提供的任何帮助非常感激。

谢谢。

回答

1

看来你有三个问题:

  1. 存储数据有关雇员(不包括关系/层次)
  2. 雇主对雇员的层次结构(可随时间变化)
  3. 员工到员工的工作经历(同样,随时间变化)

要依次解决每个:

  1. Employee数据:这可能是分区的,有唯一的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的索引至少。

这里的关键是,不要试图将雇员数据表中的关系/层次 - 这将是缓慢和限制关联,您需要(特别是链接随时间变化)。

+0

感谢您的回应。我正在考虑将员工数据与层次结构分离的相同方式,但是由于这两个数据集都会过大,因此无法将单个数据库中的数据保留在我所处的分区方面。对雇员数据进行分区非常简单,但是分层数据将跨多个分区引用行。这是我关心的最后一点。有任何想法吗? – tree

+0

您正在考虑使用哪些数据库?我知道大多数企业级数据库都具有分区功能,可以以对sqls不可见的方式分割(拆分)非常大的表。 我不熟悉每个数据库的确切的语法,但一旦我们知道你的标题,别人也许能帮助的细节。 – Will

+0

我在SQL Server上,尽管我从跨越远程分区的查询的性能影响角度考虑了这一点。尽管SQL Server有一些机制可以将我隐藏起来,让我写分区不可知的查询,但我认为由于跨分区查询,我会遇到性能问题。 – tree