2014-12-22 118 views
0

我试图找出一些使用大型数据文件的最佳方法。我有一个场景,我将有几个CSV文件,其中我希望能够查询数据。我将逐行读取一个csv文件,但我需要能够根据当前正在阅读的行中的一个键来查询第二个CSV文件。我不想(至少我不认为)将整个CSV加载到内存对象中,因为它们可能是数百万行,并且会占用大量内存。我曾考虑过将它们写入某种数据库文件,但由于您本质上复制了数据,因此效率不高。有什么建议么?使用大型csv文件

+0

打开需要进行逐行读取在25%块在不同的线程 – prospector

+1

可能是你可以考虑运行将您的CSV文件数据库后台服务的人。那么你可以很容易地让SQL查询 – Saravanan

+0

的要求不明确,也许你只需要第一个CSV的单行做查询,如果是这样的话'StreamReader.ReadLine()'就足够了。如果您确实需要100万行的所有密钥来执行查询,那么您没有更好的选择。 – kennyzx

回答

-1

您可以尝试OleDb,使用数据适配器在数据表中加载数据,并对其执行查询。这link解释

String conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\; 
    Extended Properties=""Text;HDR=No;FMT=Delimited"""; 

OleDbConnection cn = new OleDbConnection(conn); 
OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM C:\Temp\teams.csv", cn); 
OleDbDataAdapter da = new OleDbDataAdapter(cmd); 

cn.Open(); 

DataTable dt = new DataTable(); 

da.Fill(dt); 
+0

答案没有考虑OP对RAM使用情况的担忧。 – Aron

+0

@Suresh将它加载到内存中并不是真正的选择。这些文件可能有1-2列,30列。看来,把他们扔到数据库上是我最好的选择。 – collinszac10

+0

我明白了,是的,在这种情况下,上述解决方案将无法正常工作。 – Suresh