PyTables против скорости вставки SQLite3

Я купил данные об акциях Кибо, и они огромны. У меня есть около 125000000 строк для загрузки (1000 акций * 125000 строк на одну акцию [данные 1-минутного бара с 01.01.2010], каждая акция в файле CSV, поля которого: Дата, Время, Открытие, Максимум, Минимум, Закрытие, Объем). Я совершенно новичок в python (я выбрал его, потому что он бесплатный и хорошо поддерживается сообществом), и я выбрал SQLite для хранения данных из-за встроенной поддержки python для него. (И я очень хорошо знаю язык SQL. SQLiteStudio - это жемчужина бесплатной программы.)

Моя программа-загрузчик работает хорошо, но становится все медленнее. База данных SQLite имеет размер около 6 ГБ и загружена только наполовину. Я загружаю около 500 тыс. Строк в час с помощью операторов INSERT и фиксирую транзакцию после каждого запаса (примерно 125 тыс. Строк).

Итак, вот вопрос: Является ли PyTables существенно быстрее, чем SQLite , стоит ли попытаться научиться его использовать? (И поскольку я нахожусь в режиме обучения, не стесняйтесь предлагать альтернативы этим двум.) Одна вещь, которая беспокоит меня в PyTables, - это то, что это действительно голый костяк, почти как сохранение двоичного файла для бесплатной версии. Никаких функций "where clause" или индексации, поэтому вы завершаете сканирование в поисках нужных строк.

После загрузки данных я собираюсь провести статистический анализ (скользящая регрессия и корреляция и т.д.), используя что-то на основе на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать с PyTables или pandas (или чем-то еще), учтите это в своем ответе.

(Для @John) прилагать усилия, чтобы научиться использовать это того стоит? (И поскольку я нахожусь в режиме обучения, не стесняйтесь предлагать альтернативы этим двум.) Одна вещь, которая беспокоит меня в PyTables, заключается в том, что это действительно голый костяк, почти как сохранение двоичного файла для бесплатной версии. Никаких функций "where clause" или индексации, поэтому вы завершаете сканирование в поисках нужных вам строк.

После того, как я загружу данные, я собираюсь провести статистический анализ (скользящая регрессия и корреляция и т. Д.), Используя что-то на основе на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать с PyTables или pandas (или чем-то еще), учтите это в своем ответе.

(Для @John) прилагать усилия, чтобы научиться использовать это того стоит? (И поскольку я нахожусь в режиме обучения, не стесняйтесь предлагать альтернативы этим двум.) Одна вещь, которая беспокоит меня в PyTables, - это то, что это действительно голый костяк, почти как сохранение двоичного файла для бесплатной версии. Никаких функций "where clause" или индексации, поэтому вы завершаете сканирование в поисках нужных вам строк.

После того, как я загружу данные, я собираюсь провести статистический анализ (скользящая регрессия и корреляция и т. Д.), Используя что-то на основе на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать с PyTables или pandas (или чем-то еще), учтите это в своем ответе.

(Для @John) не стесняйтесь предлагать альтернативы этим двум.) Одна вещь, которая беспокоит меня в PyTables, - это то, что это действительно голый костяк, почти как сохранение двоичного файла для бесплатной версии. Никаких функций "where clause" или индексации, поэтому вы завершаете сканирование в поисках нужных вам строк.

После того, как я загружу данные, я собираюсь провести статистический анализ (скользящая регрессия и корреляция и т. Д.), Используя что-то на основе на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать с PyTables или pandas (или чем-то еще), учтите это в своем ответе.

(Для @John) не стесняйтесь предлагать альтернативы этим двум.) Одна вещь, которая беспокоит меня в PyTables, - это то, что это действительно голый костяк, почти как сохранение двоичного файла для бесплатной версии. Никаких функций "where clause" или индексации, поэтому вы завершаете сканирование в поисках нужных строк.

После загрузки данных я собираюсь провести статистический анализ (скользящая регрессия и корреляция и т.д.), используя что-то на основе на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать с PyTables или pandas (или чем-то еще), учтите это в своем ответе.

(Для @John) для бесплатной версии. Никаких функций "where clause" или индексации, поэтому вы завершаете сканирование в поисках нужных вам строк.

После того, как я загружу данные, я собираюсь провести статистический анализ (скользящая регрессия и корреляция и т. Д.), Используя что-то на основе на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать с PyTables или pandas (или чем-то еще), учтите это в своем ответе.

(Для @John) для бесплатной версии. Никаких функций "where clause" или индексации, поэтому вы завершаете сканирование в поисках нужных вам строк.

После того, как я загружу данные, я собираюсь провести статистический анализ (скользящая регрессия и корреляция и т. Д.), Используя что-то на основе на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эту рекомендацию лучше всего использовать с PyTables или pandas (или чем-то еще), учтите это в своем ответе.

(Для @John) Python 2.6;
32-разрядная версия Windows XP SP3;
Изготовленные строки, используемые в качестве операторов INSERT;
Использование памяти стабильно - 750 МБ из 2 ГБ физической памяти;
Загрузка ЦП составляет 10% +/- 5%;
Полное ограничение ввода-вывода (диск всегда хрустит).
Схема БД:

create table MinuteBarPrices (
    SopDate smalldatetime not null,
    Ticker  char( 5 )     not null,
    Open    real,
    High    real,
    Low     real,
    Close   real          not null,
    Volume  int,
    primary key ( SopDate, Ticker )
);
create unique index MinuteBarPrices_IE1 on MinuteBarPrices (
    Ticker,
    SopDate
);
12
задан pklaus 16 November 2014 в 20:18
поделиться