The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

22.07.2010 16:10

После двух лет разработки представлен релиз новой ветки 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().


  1. Главная ссылка к новости (http://www.sqlite.org/releasel...)
  2. OpenNews: Релиз SQLite 3.6.23
  3. OpenNews: Компания Oracle вошла в состав консорциума, развивающего БД SQLite
  4. OpenNews: Выпущен релиз SQLite 3.6.0
  5. OpenNews: Релиз СУБД SQLite 3.4.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/27388-SQLite
Ключевые слова: SQLite, database
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (18) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 16:42, 22/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    http://sqlite.org/src/stat
     
  • 1.2, Гентушник (ok), 16:58, 22/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    sqlite всё жирнеет :)
     
  • 1.6, User294 (ok), 18:21, 22/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Странная какая-то фича - и файлов БД становится не один, и проблем с ней есть. На любителя весьма, судя по описанию. При том любитель должен желать много и часто писать в базу (много таких любителей?) и мириться с чуть более тормозным чтением и уймой потенциальных грабель.
     
  • 1.7, Tuxoid (ok), 19:33, 22/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    И зачем оно в SQLite? Они бы еще триггеры и ХП реализовали.
     
     
  • 2.8, Аноним (-), 20:52, 22/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Так частично же тригеры там уже есть. http://www.sqlite.org/lang_createtrigger.html
    Например они создаются когда внешние ключи делаешь с каскадами.
     
     
  • 3.14, Veter (??), 22:44, 22/07/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Триггеры просто есть, а не "частично" (включая триггеры на VIEW). А внешние ключи триггеров никаких не создают, см. http://www.sqlite.org/foreignkeys.html
     
     
  • 4.15, Аноним (-), 02:02, 23/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Спорить не будем. Не забываем про genfkey который и создает совокупность тригеров для внешних ключей.

    http://www.sqlite.org/faq.html#q22
    http://www.sqlite.org/cvstrac/fileview?f=sqlite/tool/genfkey.README

    А про полноценность триггеров в sqlite это совершенно отдельная беседа.

     
  • 4.16, Аноним (-), 02:10, 23/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    точно genfkey убрали ж в версии 3.6.23, только пока в стабильных ветках дистров более старые версии где он все еще есть


     

  • 1.9, Аноним (-), 20:56, 22/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Обожаю SQLite. Это просто конфетка
     
  • 1.12, yt (?), 22:17, 22/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    SQLite на мобильных устройствах незаменим.
     
     
  • 2.18, i (??), 13:04, 23/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Чуть больше года назад пытался использовать SQLite для хранения данных в ПО на Windows Mobile. К сожалению, все прекрасно работало (простейший тест: создать базу → записать → прочитать → закрыть) на внутренней памяти устройства, а вот если писать на внешнюю SD -  валился.
     
     
  • 3.19, Veter (??), 13:22, 23/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    У нас работает в продакшене лет 5 на нескольких десятках винмобайловских КПК, ни с одной версией эскулайт проблем не было. А если _у вас_ валился, то однозначно, RTFM.
     

  • 1.13, Veter (??), 22:39, 22/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Финансовую поддержку разработчиков SQLite осуществляет
    > специально созданный консорциум

    На самом деле, это лишь клиенты платной техподдержки эскулайт (кажется, 75 000$ в год все удовольствие стоит без ограничения на число инсталляций; как недавно представители Оракл в рассылке эскулайта писали, это очень выгодно и удобно, так что mush have). "Консорциум" слово красивое, а эскулайт развивается по запросам комьюнити.

    > "Ведение WAL-лога существенно повышает надежность хранения данных,

    Неправда. Надежность - не повышает, с надежностью в эскулайт и раньше все в порядке было.

    > гарантирует атомарность выполнения транзакций

    Транзакции всегда атомарны, иначе это не транзакции.

    > организовать откат изменений на определенное состояние в прошлом."

    На "определенное состояние" откат не делается, по крайней мере, сейчас. Можно только последнюю транзакцию откатить. Теоретически как бы можно было б сделать откат не только последней транзакции, но вместо этого реализованы автоматические чекпойнты и чекпойнты в фоновом потоке. Приложение может заблокировать чекпойнты насовсем, так что журнал будет только расти и можно состряпать утилиту для отката, но ротации журнала нет, так что это будет странный ковыляющий велосипед. Хинт: есть встроенная фича логирования запросов, если нужна история изменений, самое то.

     
  • 1.17, Кодир (?), 11:40, 23/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мож я чё в инглише не понимаю, поправьте?

    > Advantages include:
    > 1. WAL is significantly faster in most scenarios.
    > 2. readers do not block writers and a writer does not block readers

    и тут же:
    > But there are also disadvantages: 6. WAL might be very slightly slower (perhaps 1% or 2% slower) than the traditional rollback-journal approach in applications that do mostly reads and seldom write.

    Разве "большинство чтений, изредка запись" не является "most scenarios"?? (биллинг/банкинг не учитывем) Тем более, что теперь ридеры и врайтеры как бы не мешают друг другу. Чудеса...

     
     
  • 2.20, Veter (??), 13:32, 23/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Все верно написано. Для чтения режим WAL чуть медленнее, т.к. надо при чтении заглянуть и в WAL журнал, где могут быть новые версии данных, еще не внесенные в файл БД. Поэтому, если в приложении в основном чтение производится, чтение будет на пару процентов медленнее. При малом числе операций записи (на 1 запрос записи порядка 1000 и выше запросов чтения, почти или полностью read-only БД) и усредненное время всех запросов станет на 1%-2% больше, хотя запись с WAL работает быстрее. Если же запросов записи порядка единиц процентов и более от общего числа обращений к БД (что и обозначено в оригинале как наиболее типичный случай), будет заметен выигрыш от использования WAL.
     

  • 1.21, Knuckles (ok), 12:20, 25/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Клевый проект. Использовал года 2 назад эту БД, остались очень теплые чувства. Все делается очень просто и надежно, хорошая документация. Не без ложки дегтя конечно: на обработке миллионов записей что-то случалось, и запрос не завершался, даже спустя 20-30 минут, что для того проекта было неприемлемо. К счастью, такой сценарий был маловероятен. Наверное мне скажут, что sqlite на таких объемах был не к месту; я даже соглашусь :). Просто была необходима самая маленькая, встроенная в приложение БД.
     
     
  • 2.22, Veter (??), 19:25, 26/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Наверное мне скажут, что sqlite на таких объемах был не к месту; я даже соглашусь :)

    А мы-то не знали, для баз в десятки миллионов и более записей используем ;-) Вот около 500 миллионов записей в модуле полнотекстового поиска проблемка была, а так порядок :-)

     
     
  • 3.23, Knuckles (ok), 21:31, 26/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >А мы-то не знали, для баз в десятки миллионов и более записей
    >используем ;-) Вот около 500 миллионов записей в модуле полнотекстового поиска
    >проблемка была, а так порядок :-)

    У меня там довольно тяжелый GROUP BY был. С фильтрами и сортировкой. Наверное из-за него все колом вставало.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру