Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 9, 2013 21:35:38

Vadimka
Зарегистрирован: 2013-10-09
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

Добрый вечер.

Возникла необходимость в загрузке и обработке .csv файла из 3.5 миллиона строк.
Строки содержат дату, текстовые поля, поля с целыми и рациональными числами.
Некоторые элементы маркируются NaN (по аналогии с матлабовским NaN).

Собственно, вопрос: чем лучше считывать такие данные с целью последующей статистической обработки (данные модифицировать не надо)?

Пробовал loadtxt (из numpy).
В результате получаю одномерный массив картежей, что исключает лёгкое итерирование (например, надо получить i-ый столбец данных и уже не напишешь data).

Основной приоритет - быстрый доступ к данным с возможностью получать часть таблицы.
В дальнейшем планируется генерировать и обрабатывать подтаблицы по запросу (например, объединять в подтаблицы записи, имеющие одинаковые id, но разные временные теги).

Ну и хотелось бы, чтобы решение, по возможности, было масштабируемо на случай обработки файлов в 20-25 миллионов строк.

Офлайн

#2 Окт. 9, 2013 21:40:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

Засуньте данные в базу данных по вкусу, они для этого и существуют, или Вы хотите выдумать их заново?



Офлайн

#3 Окт. 10, 2013 08:52:15

Vadimka
Зарегистрирован: 2013-10-09
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

Спасибо, думал об этом.

Смущают 2 вещи:
1. Поправьте, если ошибаюсь, но SQLite не поддерживает загрузку и обработку NaN.
2. Какова разница в скорости обработки данных тем же numpy и sqlite?

Офлайн

#4 Окт. 10, 2013 09:51:04

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Загрузка и быстрая обработка нескольких миллионов строк

Рекомендую вам использовать mongodb. Смысл рекомендации простой, там практически нечего настраивать в плане производительности и вы из коробки получите неплохую скорость вставки и чтения записей. А в sqlite/postgres/mysql придётся повозиться с настройкой транзакций и буферов.

Офлайн

#5 Окт. 10, 2013 09:52:40

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Загрузка и быстрая обработка нескольких миллионов строк

Также ещё можно в сторону редиса посмотреть, если все данные в RAM помещаются. Но redis это уже специфичная БД, зависит от того насколько сложная структура данных у вас и насколько сложные выборки.

Офлайн

#6 Окт. 10, 2013 12:06:47

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

lorien
Рекомендую вам использовать mongodb.
Автору нужно данные потом активно обрабатывать запросами.
Несмотря на самый развитый среди NoSQL язык Монги, он все таки слабоват.
Но все, конечно, зависит от сложности запросов.

lorien
А в sqlite/postgres/mysql придётся повозиться с настройкой транзакций и буферов.
Зачем?
Сейчас даже Постгри ставится и работает из коробки.
Для указанного объема данных вообще никаких настроек делать не нужно, 25млн строк - это мизер.

Vadimka
1. Поправьте, если ошибаюсь, но SQLite не поддерживает загрузку и обработку NaN.
Начиная с 3.4.0 SQLite при загрузке данных автоматически конвертировала NaN в NULL.
Для последующей обработки запросами NULL все таки удобнее и понятнее с точки зрения правил обработки.
Попробуйте загрузить и посмотреть на результат.
Только грузите с помощью консольной утилиты в batch режиме.
Естественно, это подойдет только, если данные у вас не могут иметь третье логически правильное значение - NaN, отличающееся от числа и NULL.



Офлайн

#7 Окт. 10, 2013 17:39:20

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

Lexander
Сейчас даже Постгри ставится и работает из коробки.
Ни ни ни. Постгресс и мускул из коробки шевелятся, не более того, во всяком случае на RHEL.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Окт. 10, 2013 21:58:21

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

Блин, где вы такие дистры берете, что они не работают? :/
Впрочем, я все равно посоветовал выше SQLite, он то с полпинка заводится.



Офлайн

#9 Окт. 11, 2013 04:54:18

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

Lexander
Блин, где вы такие дистры берете, что они не работают? :/
Вполне себе индустриальный стандарт - Red Hat Enterprise Linux, ну или он же в виде Centos. Из коробки конфиги дают возможность запуститься на самой убогой железке. После тюнинга (ну если у железа есть ресурсы конечно), можно ускорить раз в десять (это личный опыт, с мускулом). Регулярно просматривая журнал медленных запросов можно выжать еще.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#10 Окт. 11, 2013 11:28:07

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Загрузка и быстрая обработка нескольких миллионов строк

PooH
Из коробки конфиги дают возможность запуститься на самой убогой железке. После тюнинга (ну если у железа есть ресурсы конечно), можно ускорить раз в десять (это личный опыт, с мускулом). Регулярно просматривая журнал медленных запросов можно выжать еще.
А, в этом смысле.
Для меня описание “шевелятся, не более того” имеет другое значение.
По условию задачи ожидается рост до всего-то 25 млн строк. А сейчас вообще 3,5.
На таких объемах ничего настраивать не нужно ни в одной из указанных СУБД.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version