Бързо вмъкване в SQLite
Поради някои особености на SQLite, процедурата за запис на данни в базата данни (INSERT) отнема доста време. Но тази задача може да бъде решена, ако следвате определени препоръки.
Изходният код на демонстрационния проект е достъпен на GitHub.
Описание на този проблем може да се намери в оригиналния източник. Оригиналният текст изглежда така.
INSERT е наистина бавен - мога да направя само няколко десетки INSERTs в секунда
Всъщност SQLite лесно ще направи 50 000 или повече INSERT израза в секунда на среден настолен компютър. Но това ще направи само няколко десетки транзакции в секунда. Скоростта на транзакция е ограничена от скоростта на въртене на вашето дисково устройство. Обикновено една транзакция изисква две пълни завъртания на дисковия диск, което на 7200RPM дисково устройство ви ограничава до около 60 транзакции в секунда.
Скоростта на транзакцията е ограничена от скоростта на дисковото устройство, тъй като (по подразбиране) SQLite всъщност изчаква, докато данните наистина се съхраняват безопасно на повърхността на диска, преди транзакцията да приключи. По този начин, ако внезапно загубите захранване или ако вашата операционна система се срине, вашите данни все още са в безопасност. За подробности прочетете за атомния фиксиране в SQLite. .
По подразбиране всеки оператор INSERT е собствена транзакция. Но ако заобиколите множество изрази INSERT с BEGIN ... COMMIT, тогава всички вложки са групирани в една транзакция. Времето, необходимо за извършване на транзакцията, се амортизира върху всички приложени оператори за вмъкване и така времето за оператор за вмъкване е значително намалено.
Друга възможност е да стартирате PRAGMA синхронно = OFF. Тази команда ще накара SQLite да не чака данните да достигнат до повърхността на диска, което ще направи операциите по запис да изглеждат много по-бързи. Но ако загубите енергия в средата на транзакция, файлът на вашата база данни може да се повреди.
Безплатният превод на тази бележка е както следва.
Аз NSERT е много бавен - мога да направя само няколко десетки INSERTs в секунда!
Всъщност SQLite може лесно да направи 50 000 или повече INSERT в секунда на среден работен плот. Но в същото време броят на транзакциите по едно и също време ще бъде само няколко десетки. Скоростта на транзакцията е ограничена от скоростта на въртене на шпиндела на твърдия диск. Транзакцията, като правило, изисква две завъртания на пълен диск, които при 7200 оборота в минута ще дадат около 60 транзакции.