2014-12-22 8 views
0

Я пытаюсь найти некоторые из лучших способов работы с большими файлами данных. У меня есть сценарий, где у меня будет несколько CSV-файлов, из которых я хотел бы получить возможность запрашивать данные. Один из файлов csv я буду читать по строкам, но мне нужно иметь возможность запрашивать второй файл CSV на основе ключа из строки, которую я сейчас читаю. Я не хочу (по крайней мере, не думаю) загружать весь CSV в объект памяти, поскольку они могут быть миллионы строк и будут потреблять тонны ОЗУ. Я подумывал о том, чтобы писать их в какой-то файл базы данных «на лету», но это просто не кажется эффективным, поскольку вы по существу дублируете данные. Какие-либо предложения?Работа с большими файлами csv

+0

Откройте те, которые должны быть построчно читать 25% куски в разных потоках – prospector

+1

Может быть, вы можете рассмотреть фоновую службу, которая работает, чтобы переместить ваш CSV файл в базу данных. Тогда вы можете легко выполнить SQL-запросы – Saravanan

+0

, это требование неясно, возможно, вам нужна только одна строка 1-го CSV для выполнения запроса, если это так, 'StreamReader.ReadLine()' достаточно. если вам нужны все ключи от 1 миллиона строк для выполнения запроса, тогда у вас нет лучшего выбора. – 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

Ответ не учитывает опасения ОП относительно использования ОЗУ. – Aron

+0

@Suresh, загружающий его в память, на данный момент на самом деле не вариант. Эти файлы могут иметь 1-2 миллиона строк с 30 столбцами. Похоже, что бросать их в базу данных «на лету» - это мой лучший выбор. – collinszac10

+0

Я понимаю, и да в этом случае выше решение не будет работать. – Suresh

Смежные вопросы