2011-07-21 27 views
1

這只是一個關於海量數據庫設計的設計問題。例如,如果您打算建立一個可容納1000萬用戶的數據庫,那麼您將如何構建它?你如何構建大規模設計數據庫?

我主要是好奇之類的數據庫複製,這實際上加快什麼?

在構建這種規模的分貝,說的字段是「用戶名」,「姓名」,「公司」,「出生日期」,「性別」不是做一個表,上規模還有什麼應該考慮其他的?指標?

+0

1000萬行和5列是一個小型數據庫,不是一個「龐大」的數據庫。 – sqlvogel

回答

3

10萬元是不是特別巨大,但它足夠大,您應該謹慎考慮您的選擇。

複製可以幫助 - 很多。假設你正在閱讀你的用戶表比你寫的更多,你可以考慮一個只處理寫入的主數據庫。任何讀取您的應用程序確實會來自N個從機箱之一。

當然,索引是非常重要的。您需要在任何經常搜索的列上尋找索引(或者在WHERE子句中,或者作爲與其他表的關係結果(讀取:JOINS))。關於如何分析應用程序所進行的查詢的種類以及如何基於該分析巧妙地定義索引,已撰寫了大量的文章。如果你剛剛瞭解這些東西,那就去做一些閱讀,然後再回到SO,提出更有針對性的問題。除了單主複製(並小心編制索引)之外,當你開始變得非常大時,你可能會開始考慮partitioning - 但這是我以前只讀過的東西,所以我不想說太多了。

0

千萬記錄不一定是大型數據庫。有些人會考慮一個龐大的數據庫,其中包含數億行或更多的TB和TB的存儲空間。

除了典型的正常化,如果沒有什麼可以做,以減少表的深度(行數),則指標肯定會有所幫助。

0

一如往常這取決於所使用的情況下..什麼是你要在數據庫上運行的查詢?

某些應用程序只能通過用戶名或uid檢索用戶,因爲鍵值存儲區是完美無限的可擴展的。

如果你有額外的搜索查詢,那麼你可以把數據放到SQL(與相應的列索引),或使用外部搜索全文搜索引擎(Lucene的,獅身人面像)。您也可以在不同的副本上構建不同的索引,因此每個索引都可以用於特定的查詢,但仍然可以實現良好的插入性能(當然不是用戶表,而是用戶相關數據)。

如果你有複雜的查詢,加入多個表,那麼SQL可能是唯一的選擇,但你仍然可以在分片上對用戶名和用戶相關數據進行擴展。這又取決於查詢是什麼。對於離線查詢(統計,報告),您可以在每個分片上進行連接併合並結果集(map-reduce,gearman框架可以在此幫助)。

最後,你可以混合使用所有這些方法,使用鍵值進行登錄,使用SQL進行復雜的查詢,並利用複製的耐用性和性能。