我在數據庫中有將近100,000條記錄,我需要使用Longest Common Subsequence算法將它們與其他對象進行比較,並且我需要每天使用1000條新記錄進行比較。 我的應用程序是用c#.Net編寫的,問題是這個比較在應用程序級別上運行緩慢,因爲比較1000個記錄需要超過10個小時。 因此,有誰知道如果我在SQL中的存儲過程中編寫此算法,會有多快?或者有其他方法嗎?任何處理大量數據的好方法?
回答
其確實存儲過程比LinQ或View更快。這就是快速收集數據的方法。
僅當您以乾淨和正確的方式編寫存儲過程時,我確信有些開發人員能夠編寫將執行非常糟糕的存儲過程。所以說SP總是更快是不正確的,它可以更快(如果由一個好的開發人員完成)。 – Gertjan 2010-07-05 08:54:18
例如:與linq你可以使用條件,但它會再次獲取所有數據,並收集具體取決於你的條件。你是可靠的,編寫存儲過程時需要清楚。如果你寫的條件正確,SP會更快。 – 2010-07-05 08:58:12
如果您只有100.000條記錄。只需在應用程序啓動時收集所有內容。在內存中執行算法,並在完成時將任何結果/修改存儲到數據庫中。
這將是快得多
即使記錄太大而無法一次裝入內存,比如說每個記錄一兆字節,加載一個子集(比如500)並在該批處理上運行LCS算法,記下最佳答案,然後繼續下一批的500條記錄可能仍然比迭代每個輸入字符串的整個100,000更好。 – sarnold 2010-07-05 07:14:35
我不知道TSQL將讓你同樣的靈活性,C#允許你,尤其是當你處理像LCS複雜的算法。將所有需要的記錄存儲在內存中並從那裏處理它們。
現在最重要的事情是,你能想到開箱的一分鐘,去其他的方式,嘗試插入標記某種一旦新項目被插入的(排名)。沒有人可以在這裏建議你,因爲你沒有提供一點數據,你在做什麼以及你在比較什麼。可能您可以在新項目插入期間輕鬆進行一些排名。我並不是說一旦添加新項目就可以進行全面比較,但是如果每小時左右觸發一次事件,則無需用戶輸入即可更新表格。
你可能會想嘗試和C#編寫存儲的過程,如果你使用的是SQL Server 2005或2008年,你得到越來越多的記錄,這可能會擴大,從長遠來看更好,不能讓他們全部在內存中。
查看MSDN Introduction to SQL Server CLR Integration。
這將使用你的數據庫服務器上更多的CPU,但你不必將數據傳輸來回。
你如何確定兩個您的記錄彼此(即它們是一個子序列的一部分)遵循?也許你不需要比較每條記錄的整個1MB,只需分析一部分內容就可以加快速度。
的聲音,我喜歡你的算法的缺陷,或者一個DB可能不是存儲你的數據,如果它採取2秒比較每個記錄的最好方法?
我使用Longest Common Subsequence算法將新插入的字符串與數據庫中的所有其他字符串進行比較。 – Pece 2010-07-05 07:37:33
- 1. 尋找更好的方法來處理大量的參數
- 2. 在Javascript變量中處理大數據:不好的做法?
- 3. 需要最好的數據庫來處理大量的數據
- 4. 在Android中處理非常大量數據的好方法是什麼?
- 5. 如何處理任何數據庫上的大量事務?
- 6. Highcharts無法處理大量數據?
- 7. 什麼是在UI中處理大量排列的好方法?
- 8. 處理大量數據
- 9. 處理大量數據?
- 10. c# - 處理大量數據
- 11. 處理大量數據
- 12. 處理大量數據
- 13. 如何加快處理大量數據的耙子任務?
- 14. 在PowerShell中處理大量嵌套數據的最佳方法?
- 15. 處理現場數據到mysql數據庫的好方法
- 16. 更好的進程來同時處理大量的數據
- 17. 最好的處理方法
- 18. 大數據處理的預定任務
- 19. 如何處理大量數據?
- 20. 如何寫入處理大量數據
- 21. 處理大量的數據用的cronjob
- 22. 處理大量的數據 - 織API的
- 23. 處理大量的服務器數據
- 24. 查詢Hive處理的大量數據
- 25. 處理大量的報告數據
- 26. 處理大量的二維數據
- 27. 處理大量數據的jQuery
- 28. SQLite可以處理大量的數據
- 29. 在大數據處理期間是否有任何方法來釋放內存?
- 30. WCF如何處理大量客戶端和大量數據?
是一百還是十萬? – 2010-07-05 07:00:06
用於比較1000條記錄是否需要10個多小時?你的算法肯定有問題,存儲過程不會對你有很大的幫助。 – 2010-07-05 07:08:09
現在有100.000,但在一年內會有幾百萬條記錄。 而在比較中,我用LCS算法比較了六個字符串(書寫的行,如代碼和全名),並將它們從西里爾文轉換爲拉丁文。 而我的意思是與其他100.000 – Pece 2010-07-05 07:23:54