2013-07-15 5 views
2

Во многих моих сценариях я использую sqlite для представления информации, и мне нужно сначала загрузить мои большие данные таблицы (миллионы строк csv). Раньше я обнаружил, что .import был быстрее, чем вставка строки за строкой (даже с использованием транзакций).Perl dbd-sqlite, есть ли эквивалент функции .import?

В настоящее время мои скрипты реализуют метод, который выполняет системный вызов для sqlite3 db '.import ....'. Интересно, можно ли вызвать .import из dbd-sqlite. Или лучше было бы вызывать вставку из системы ?.

PD: Причина, по которой требуется вызвать .import изнутри dbd-sql, заключается в удалении зависимости sqlite3, когда мое программное обеспечение установлено в другом месте.

ответ

1

.import - это SQLite-специфичная команда, поэтому вы не найдете для нее DBI-метод, который не зависит от драйвера базы данных; в то время как любой данный движок базы данных почти наверняка имеет то же функциональность, каждый из них будет осуществлять его по-разному (например, SQLite .import против MySQL LOAD DATA INFILE, & в.)

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