Q/kdb+ Чтение огромного текстового файла

Мне нужно прочитать огромный файл (около 20 ГБ), содержащий торговые данные, и мне интересно, есть ли хороший способ прочитать файл, не убивая память.

Мой текущий метод загружает файлы по столбцам и объединяет эти столбцы вместе:

columnA:(" S "; 10 20 30)0:`filepath

Проблема этого метода в том, что хотя он довольно быстрый, он использует огромный кусок памяти, и я хочу улучшить его использование памяти.

Я также пытался использовать .Q.fs, но загрузка файла занимает более 3 часов...

Есть ли способ сделать это эффективно, не потребляя тонны памяти?

Спасибо


person user1948847    schedule 27.03.2013    source источник


Ответы (2)


.Q.fsn — это версия .Q.fs, который позволяет указать размер считываемых чанков в байтах, .Q.fs использует размер по умолчанию 131000. Вы можете увеличить размер блока, что ускорит процесс. .Q.fsn принимает три аргумента, первые два такие же, как у .Q.fs, последний — размер.

person John at TimeStored    schedule 28.03.2013

Нужно ли хранить таблицу в памяти или это промежуточный шаг к записи таблицы на диск?

Если вы хотите сохранить таблицу в памяти, похоже, у вас в любом случае недостаточно оперативной памяти. Независимо от того, читаете ли вы каждый отдельный столбец, а затем присоединяетесь или выполняете потоковую передачу таблицы с помощью .Q.fs, я подозреваю, что общий объем памяти будет одинаковым.

Вы можете выполнить шаги здесь, которые показывают, как обрабатывать большие файлы, хотя все они используют .Q.fs. Я предполагаю, что вы уже смотрели на это.

Если вы сохраняете таблицу непосредственно на диск в виде расширенной таблицы, вы можете читать в каждом столбце, а затем записывать по отдельности. Затем удалите столбец из памяти, прежде чем переходить к следующему.

person user1895961    schedule 27.03.2013