Я купил данные о запасах Kibot, и он огромен. У меня есть около 125 000 000 строк для загрузки (1000 акций * 125 тыс. Строк/запасов [данные за 1 минуту бара с 2010-01-01], каждый запас в файле CSV, полями которого являются дата, время, открытая, высокая, низкая, Объем). Я совершенно не знаком с python (я выбрал его, потому что он бесплатный и хорошо поддерживается сообществом), и я выбрал SQLite для хранения данных из-за встроенной поддержки python. (И я знаю язык SQL очень хорошо. SQLiteStudio - это драгоценный камень бесплатной программы.)
Моя программа загрузчика работает хорошо, но работает медленнее. SQLite db составляет около 6 Гб, и он загружен только на полпути. Я получаю около 500 тыс. Строк в час с использованием инструкций INSERT и совершая транзакцию после каждого запаса (приблизительно 125 тыс. Строк).
Итак, вот вопрос: - это PyTables значительно быстрее, чем SQLite, прилагая усилия, чтобы узнать, как его использовать? (И так как я в режиме обучения, не стесняйтесь предлагать альтернативы этим двум.) Одна вещь, которая беспокоит меня о PyTables, заключается в том, что она действительно содержит кости, почти как сохранение двоичного файла, для бесплатной версии. Нет функции "where clause" или индексации, поэтому вы завершаете сканирование требуемых строк.
После загрузки данных я собираюсь делать статистический анализ (скользящий регрессионный анализ и корреляцию и т.д.), используя что-то, основанное на NumPy: Timeseries, larry, pandas или scikit. Я еще не выбрал пакет анализа, поэтому, если у вас есть рекомендация, и эта рекомендация лучше всего использовать с PyTables или pandas (или что-то еще), пожалуйста, укажите это в ответ.
(Для @John)
Python 2.6,
Windows XP SP3 32-бит,
Производные строки, используемые в качестве инструкций INSERT.
Использование памяти - твердое тело на 750 М от физической памяти 2G,
Использование ЦП составляет 10% +/- 5%;
Полностью i/o bound (диск всегда хруст).
Схема БД:
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
);