2012-06-11 25 views
0

我需要從兩個不同的數據庫中填充兩個DataTable以進行一些比較和只讀操作。這把我帶到"select *"到這兩個DataTable將C#DataTable填充到「磁盤上」而不是「內存」中以避免內存溢出

但是,我需要檢索的表包含兩個數據庫中的約300萬行。填充時我得到OutOfMemoryException

有沒有可能在磁盤上有這些DataTable而不是在內存中? 你是否看到任何其他解決方案比較/執行這樣兩個巨大的集只讀?我需要做的事情使得通過成批的行子集進行非常複雜。

+3

您是否需要內存中的整個行集才能開始比較?如果沒有,你可以批量他們做一個100k或一次一次嗎? –

+0

我需要整個集合才能匹配DataTable對象之間的鍵。 – Jerome

+2

我認爲如果有人給出一個有用的答案,我們還需要多一點。您沒有指出您正在執行的操作 - 某人可能會提出一個可以輕鬆分批處理的好算法。您不指定數據庫服務器 - 如果服務器支持跨服務器查詢,操作是否可以在SQL中完成。在完成操作後,您也不會指出自己在做什麼 - 也許您可以將「select *」縮小爲您真正需要的列集合? – Iridium

回答

1

我的猜測是,執行此操作的理想/有效方法是在數據庫中執行此操作。不幸的是,你的兩個表格分在兩個獨立的數據庫中,這可能會導致併發症

這些表位於同一臺服務器上的兩個不同數據庫(如SQL Server實例中),還是位於兩臺獨立的服務器中?如果它們在同一個服務器/實例中,那麼你可以在數據庫服務器上執行比較邏輯。否則,如果這些表位於不同的服務器上,那麼是否有可能在數據庫之間設置某種類型的複製,以便可以將兩個數據集都集中到一個數據庫中,以便執行比較?

+0

不幸的是,一個是MSSQL,另一個是SYBASE。我需要看看這個複製的事情,也許,我不知道這個話題 – Jerome

+0

@ J.G對不起,我沒有更多的幫助。複製也不是我的知識領域,但似乎它可能是正確的方法。您可能已經發現了這一點,但我注意到了Sybase的這個指南[設置ASE和MSSQL之間的複製](http://www.sybase.com/detail?id=1024758)。 –

1

怎麼樣按鍵排序它們。

set1 A A A B C   E 
       |    
set2    B  D 

,那麼你可以去設置1,改爲集2,回去設置1 ......使得迭代更加容易。

相關問題