2012-02-06 24 views
2

我有一個問題,無論我多麼努力地嘗試,我都無法解決問題。如何最大限度地提高性能?

這家公司從事市場分析工作,並有相當大的表格(300K-1M行)和許多專欄(想想250-300),我們做一些計算。

I'll試圖讓直行的問題:

的問題是數據的過濾。到目前爲止,我嘗試過的所有數據庫都太慢,無法選擇數據並將其返回。

目前我將整個表存儲在內存中,並使用動態LINQ進行過濾。

然而,儘管這是相當快的(大約100毫秒來篩選250000行),我需要比這更好的結果...

有什麼辦法,我可以在我的代碼改變的東西(沒有數據模型)可以加速過濾嗎?

我已經嘗試使用:

DataTable.Select這是緩慢的。動態LINQ哪個更好,但是 還是太慢了。正常的LINQ(僅用於測試目的)幾乎是 就足夠了。從MySQL中獲取並稍後處理 ,這很糟糕。

在這個項目中,我們認爲,一些高性能的數據庫將能夠處理這個問題的開始,但我想:

H2(IKVM) HSQLDB(編譯ODBC驅動程序) CubeSQL MySQL SQL SQLite ...

而且它們都非常緩慢地接口.NET並獲得結果。

我也嘗試將數據拆分成塊,並在運行時將它們組合起來,以使需要過濾的數據總量更小。

這個宇宙中有什麼辦法可以讓這個更快嗎?

在此先感謝!

UPDATE

我只想補充一點,我還沒有創建有關此數據庫。

要添加一些數字,如果我做一個簡單的選擇2場的(visit_munic_name被索引)數據庫查詢窗口(SQLyog的)是這樣的:

SELECT key1, key2 FROM table1 WHERE filter1 = filterValue1 

它發生在225639行125毫秒。

爲什麼這麼慢?我測試了2個不同的盒子。

當然,他們必須改變某些,顯然?

+4

說實話,這不是很多行。聽起來像數據庫結構需要一些嚴肅的關注。 – 2012-02-06 11:39:24

+0

當你使用DB-網絡請求本身或DB側的SQL查詢執行時,你檢查過什麼慢嗎?如果網絡請求/響應緩慢 - 請參閱您是否可以將數據庫託管到應用程序附近,否則調整sql查詢eprformance,表索引等 – sll 2012-02-06 11:41:01

+1

您說選擇數據對於您使用的所有數據庫都很慢。這在我心中引起了一些紅旗。你在選擇中做任何複雜的連接嗎?你有複雜的where子句嗎?你的數據庫是否正確編入索引? – CadentOrange 2012-02-06 11:42:19

回答

5

你沒有解釋你到底想要做什麼,或者爲什麼過濾很多行很重要。如果數據庫可以爲您預先計算該聚合,那麼爲什麼它應該多快才能過濾1M行以獲取聚合?無論如何,你似乎在爲這項工作使用錯誤的工具。

一方面,對於大多數數據庫,1M行是少量行。只要你有適當的索引,查詢應該不是一個大問題。我懷疑你的查詢列沒有索引,或者你想在非索引列上執行臨時查詢。

此外,如果數據模式對於作業是錯誤的,則使用哪個數據庫並不重要。分析應用程序通常使用星型模式,以便比您描述的更快地查詢更多的數據。

所有用於分析目的的數據庫都使用特殊的數據結構,這些數據結構要求您將數據轉換爲他們喜歡的形式。 對於典型的關係數據庫,您必須創建與多維數據集結合以預先計算聚合的星形模式。 列數據庫通常將列數據格式與壓縮數據相結合以實現快速分析查詢,但它們要求您學習使用自己的語言來查詢數據,這可能與大多數人習慣使用的SQL語言差別很大。

另一方面,,你查詢的方式(LINQ或DataTable.Select或其他)對性能影響最小。選擇合適的數據結構更重要。

例如,使用字典<>比使用您提到的任何技術要快得多。字典本質上檢查內存中的單個值。執行DataTable.Select沒有索引,使用LINQ to Datasets或使用LINQ to Objects與掃描數組或列表中的所有條目相同,因爲這是所有這些方法的作用 - 按順序掃描整個列表。

各種LINQ提供程序不執行數據庫的工作。他們不會優化您的查詢。他們只是執行你告訴他們執行的內容。即使在排序列表上進行二分搜索比使用通用LINQ提供程序更快。

有各種各樣的事情,你可以嘗試,這取決於你需要做什麼:

  • 如果你正在尋找一個快速的方式來切割您的數據,使用現有產品類似的Excel的PowerPivot功能2010。PowerPivot以內存中的柱狀格式加載和壓縮成百萬行的行,並允許您像查看數據透視表一樣查詢數據,甚至可以定義與其他內存源中的連接。
  • 如果您想要一個更可重複的流程,您可以在關係數據庫中創建適當的星型模式或使用柱狀數據庫。無論哪種情況,您都必須編寫腳本來將數據加載到適當的結構中。

  • 如果您正在創建自己的應用程序,您真的需要研究其他類似工具在內存中使用的各種算法和結構。

相關問題