2009-11-26 54 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