2011-02-11 75 views
0

問候溢出,多連接的性能

我需要查詢具有許多/複雜空間條件的對象。 在翻譯爲多個連接(可能爲10+)的關係數據庫中。 我是新來的這個企業,想知道是否去MS SQL Server 2008 R2或Oracle 11g或基於文檔的解決方案,如RavenDB或只是去一些空間數據庫(GIS)...

任何想法?

問候

UPDATE:謝謝大家對你的答案。有人會選擇文檔/空間數據庫嗎?我的數據庫將包含數千萬到數十億條記錄。大部分是隻讀的。幾乎沒有更新,除非在輸入錯誤的情況下。隔夜插入,並沒有那麼頻繁。預先預測連接表,但自連接(多次連接自己的表)不是。此類查詢的小頁面結果將在高度互動的網站上查看,因此響應時間至關重要。任何有關如何在MS SQL Server 2008 R2或Oracle 11g上執行的預測?我還擔心通過添加更多的服務器來提升性能,哪一個服務器的性能更好?如何PostgresQL?

回答

1

構建和測試。

這是知道您的想法是否可行的唯一途徑。有免費版本的Oracle,SQL Server和Teradata可供下載。 PostgreSQL是免費的,期間。

數據庫設計幫助可能不是免費的。 SQL性能比其他單一原因更糟糕的設計。

我做了一個測試(概念驗證)昨天(在我腦海中一起運行)20個50萬行的表,自然鍵(沒有id號),20個左連接,中位訪問時間40毫秒。使用具有慢速磁盤和2個RAM的商用臺式計算機。


編輯:似乎也有一個free, single-server version of Greenplum是唯一的約束兩個CPU插槽,對CPU內核沒有任何限制。對數據庫大小也沒有限制。我感覺需要玩幾TB。

2

在實際應用中對一組表進行10+次連接的情況比您想象的要普遍得多。內部連接和外部連接的影響會有所不同,但我不會過分擔心,除非您外部連接的數據量變得非常大。數據庫針對處理集進行了優化。

示例:

就在昨天,我寫了一個查詢,執行13個內部聯接。它在不到一秒的時間內執行了50,000多條記錄。

1

一致認爲,與查詢數據量相關聯的問題並不多。儘管我承認在使用MS SQL Server 2005,MS SQL Server 2008 R2和ORACLE 10g和11g的環境中工作,但似乎我們的MS SQL數據庫在運行大型查詢時稍微更容易出現死鎖。

1

您的問題中最大的一個未知數是SQL和類似SQL語句的動態性如何,謂詞中的值多久更改一次?他們是否使用綁定參數而不是內聯值(他們應儘可能)。如果有很多重用的機會,Oracle將是我的選擇。

無論SQL的複雜性如何,Oracle都有一系列可以提供幫助的功能。物化視圖和SQL重寫可以在輕度老化結果可接受實時結果的情況下提供強大的性能優勢。另外還有11g來自結果集緩存。

一旦數據庫選擇了一個優化計劃,它就不是那麼重要的連接數量,因爲這些特定的連接對數據庫的調優程度如何。索引,最新的統計數據和物化視圖可能至關重要。

1

MS SQL Server 2008 R2和ORACLE 11g都應該能夠毫無困難地處理這些問題。就可擴展性而言,我會在RAC環境中推薦Oracle 11g。您也可以使用MS SQL Server 2008 R2進行Microsoft集羣,但根據我的經驗,Oracle的RAC是更穩固的解決方案。

與此同時,您計劃在數據庫中使用的應用程序也應在決策中發揮作用。如果您將使用MS SharePoint或其他MS應用程序,那麼MS SQL Server 2008 R2可能是更好的解決方案。

在PostgreSQL方面,我沒有多少經驗,但我聽說過在企業環境和大型商業環境中使用過它的人的噩夢故事。從我所知道的來看,它不是完全可擴展性友好的。就我個人而言,如果您正在尋找一個開源解決方案,我認爲MySQL會是一個更好的解決方案,但是要記住開源SQL解決方案並不是最容易實現的可伸縮性或高可用性環境,如果這是您的終極目標目標。