Релиз БД SQLite 3.7.0 с поддержкой журнала транзакций

После двух лет разработки представлен релиз новой ветки SQLite 3.7.0, легковесной базы данных, оформленной в виде подключаемой библиотеки. Код SQLite переведен в разряд общественного достояния (public domain), т.е. может использоваться без ограничений и безвозмездно в любых целях. Финансовую поддержку разработчиков SQLite осуществляет специально созданный консорциум, в которых входят такие компании, как Adobe, Oracle, Mozilla, Symbian и Bloomberg.

Наиболее значительным улучшением в новой ветке является реализация WAL-журнала транзакций (Write-Ahead Log) в котором отражаются все происходящие с базой данных события, связанные с изменением данных и схемы их хранения. Ведение WAL-лога существенно повышает надежность хранения данных, гарантирует атомарность выполнения транзакций, дает возможность организовать откат изменений на определенное состояние в прошлом.

WAL-лог по сравнению с rollback-журналом повышает скорость выполнения операций, обеспечивает более оптимальный метод обработки конкурирующих запросов (запросы на чтение не блокируют запросы на запись и наоборот, т.е. операции чтения и записи могут выполняться параллельно), снижает число непоследовательных обращений к диску. Тем не менее с целью сохранения полной совместимости с прошлыми версиями по умолчанию в SQLite 3.7.0 по прежнему остается активным rollback-журнал, т.е. допустимо выполнение обновления версии SQLite без изменения формата БД.

Из других улучшений в SQLite 3.7.0 можно отметить:

  • Улучшение работы планировщика запросов.
    • Добавлена поддержка автоматического создания временных переходных индексов, что позволяет сократить время выполнения запросов.
    • Отключение обработки "ORDER BY", когда в запросе уже используется выражение "GROUP BY", что позволяет добиться правильного порядка вывода.
  • Добавлена поддержка параметра SQLITE_DBSTATUS_CACHE_USED для функции sqlite3_db_status(), для получения в реальном режиме времени информации о состоянии распределения памяти для всех областей, ассоциированных с заданным соединением к БД.
  • Логический размер базы данных теперь сохраняется в заголовке, что позволяет добавлять новые данные в конец файла с БД без его повреждения, даже в системах не имеющих поддержки ftruncate().

© OpenNet