Этот вопрос связан с пригодностью различных механизмов баз данных для исследований в области ИК и ИИ.Два важных вопроса выделены жирным шрифтом ниже.
Я загружаю текстовый корпус объемом 17 гигов в sqlite3, используя python.Позиции заполняют три таблицы с одним шагом нормализации 1 .. * в среднем по 5 записей на строку.У меня нет индексов на столах.Я не собираю операторы вставки вместе, что мне, вероятно, следовало бы иметь, но я вызываю сообщение коммита sqlite только после миллиона строк (таким образом, 3-8 вставок таблицы на строку).Оглядываясь назад, я, вероятно, должен был объединить их в 1000 значений / вставку.Коммит, вероятно, не делает то, что я думал, вероятно, он выполняет внутренние коммиты каждые несколько записей.
Загрузка данных началась с привязки к ЦП, но теперь, когда размер БД составляет 33 гигабайта, кажется, что она связана с вводом-выводом.и открытый текст, и файл базы данных находятся на одном диске.Я предполагаю, что sqlite3 очень консервативен с предварительным заполнением своих страниц и теперь разделяет страницы слева направо и по центру.
В любом случае, я пока остановлюсь на sqlite3, я думаю, преимущество перед базой данных корпоративного уровня заключается в возможности создавать несколько файлов базы данных ad-hoc и размещать их на разных дисках.Традиционно я предполагаю, что большинство людей используют Postgres / Xapian / Sql Server или Oracle для такого рода вещей.
Из опыта Является ли sqlite3 препятствием для создания системы IR / AI или благословением? Я имею в виду, что я даже еще не создал индексы, и данные загружались в течение 14 часов.Если я собираюсь постоянно сталкиваться с такими огромными временами загрузки, я мог бы просто использовать Sql Server для будущего прототипирования. Я знаю, что у Berkeley db также есть интерфейс sqlite3, и он должен обладать характеристиками производительности транзакционной базы данных mvcc, у кого-нибудь есть какой-нибудь опыт применения такого подхода?
edit
Как напомнил мне Джеймс, переключение транзакций удаляет из уравнения 2 записи синхронных дисков, поэтому я отключу журнал, во-вторых, я отключу синхронную настройку, чтобы у движка была возможностьвставлять строки по своему усмотрению, то есть я ожидаю, что они будут вести себя так, как если бы я выполнял пакетную вставку строк.
C ++ может быть просто лучшим языком для загрузки данных (особенно когда речь идет о 340 миллионах строкданных), я ожидаю, что огромное количество бесполезных циклов будет потрачено впустую на копирование и распределение памяти.Поправьте меня, если я ошибаюсь, так как быстрее написать одноразовый код на python.