LINUX.ORG.RU

SQLite 3.12.0

 ,


1

1

Представлен релиз SQLite 3.12.0 — компактной встраиваемой реляционной СУБД, находящейся в общественном достоянии.

Потенциально разрушительное изменение:

Значение SQLITE_DEFAULT_PAGE_SIZE увеличено с 1024 до 4096. Значение SQLITE_DEFAULT_CACHE_SIZE изменено с 2000 на -2000, таким образом такое же количество кэш-памяти используется по умолчанию. Подробности.

Основные изменения:

  • Улучшения в генераторе Lemon, позволяющие создавать более быстрый SQL парсер меньшего размера.
  • Более эффективная обработка SQL функций задаваемых приложением, особенно в случаях, когда приложение определяет сотни или тысячи функций.
  • Конфигурационный скрипт (на unix) автоматически определяет наличие pread() и pwrite() и устанавливает соответствующие опции времени компиляции, чтобы использовать эти интерфейсы операционной системы, если они доступны.
  • Уменьшено количество потребляемой памяти, необходимое для схемы.
  • Другие различные микро-оптимизации для улучшения производительности и уменьшения количества используемой памяти.
  • В sqlite3_db_config() добавлена опция SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER которая позволяет включить или выключить двух-аргументную версию SQL функции fts3_tokenizer() в рантайме.
  • В RBU расширение добавлен интерфейс sqlite3rbu_bp_progress().
  • Выражение PRAGMA defer_foreign_keys=ON теперь также выключает RESTRICT действия для внешних ключей.
  • Добавлен интерфейс sqlite3_system_errno().
  • Добавлены опции времени компиляции SQLITE_DEFAULT_SYNCHRONOUS и SQLITE_DEFAULT_WAL_SYNCHRONOUS. SQLITE_DEFAULT_SYNCHRONOUS заменяет опцию SQLITE_EXTRA_DURABLE, которая больше не поддерживается.
  • Команда ".stats" шелла теперь показывает больше информации о производительности ввода/вывода, пролученной из /proc, когда это возможно.

>>> Подробности

★★★★★

Проверено: Klymedy ()

Значение SQLITE_DEFAULT_CACHE_SIZE изменено с 2000 на -2000, таким образом такое же количество кэш-памяти используется по умолчанию

Это как?

alexferman ()
Ответ на: комментарий от alexferman

Типичный пример ситуации, когда переводчик не совсем разбирается в том, что переводит.

This macro sets the default maximum size of the page-cache for each attached database. A positive value means that the limit is N page. If N is negative that means to limit the cache size to -N*1024 bytes. The suggested maximum cache size can be overridden by the PRAGMA cache_size command. The default value is -2000, which translates into a maximum of 2048000 bytes per cache.

Короче, раньше ограничение на размер кэша было 2048 страниц, а сейчас 2048*1024 байт (и от размера страницы не зависит). Одновременно с этим размер страницы изменили с 1024 на 4096. Т. е. по сути изменили размер страницы, а (абсолютный) размер кэша оставили таким же.

Из пояснения:

Since the SQLite database file format was designed (in 2003) the default page size for new databases has been 1024 bytes. This was a reasonable choice in 2003. But on modern hardware, a 4096 byte page is a faster and better choice. So, beginning with SQLite version 3.12.0 (circa 2016) the default page size for new database files has been increased to 4096 bytes.

The upper bound on the database cache size has traditionally defaulted to 2000 page. SQLite version 3.12.0 also changes this default setting to be "-2000" which means 2000*1024 bytes, regardless of page size. So, the upper bound on the amount of memory used for the page cache is unchanged.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Типичный пример ситуации, когда переводчик не совсем разбирается в том, что переводит.

Типичный пример, когда регистрант нихрена не знает и не понимает, но учит других. Дефолтное значение теперь действительно -2000 (проверено).

anonymous ()
Ответ на: комментарий от anonymous

Дефолтное значение теперь действительно -2000

С этим никто не спорит. Вопросы по второй части предложения:

такое же количество кэш-памяти используется по умолчанию

Отрицательное количество кэш-памяти - это пять. В голову приходит только такая схема: ОС использует под свои нужды часть БД.

alexferman ()
Ответ на: комментарий от alexferman

Лол. intelfx правильно подметил, я лишь можно сказать дословно перевёл.

The SQLITE_DEFAULT_CACHE_SIZE is changed from 2000 to -2000 so the same amount of cache memory is used by default.

Kilte ★★★★★ ()

Лучшая БД.
Никогда не терял от неё пароль.

Centrin0 ()
Ответ на: комментарий от alexferman

Это теперь только к корректорам/модераторам.

Kilte ★★★★★ ()
Последнее исправление: Kilte (всего исправлений: 1)

Пожалуй единственная новость за последнее время по поводу которой нет желания выругаться.

anonymous ()

я обожаю скулайт, пацаны на славу постарались! и юникод, и integer64 как число, и четыре типа данных всего. без выпендрёжа.

Spoofing ★★★★★ ()

Я правильно понимаю, что в таких встраиваемых вещах как SQLite, где нету отдельных DB-процессов, а все дела делает сама программка с sqlite-библиотекой - то авторы каждой такой для всех языков должны специально все эти изменения внедрить, чтоб их можно было использовать? Иначе каждая новая версия только для консольной утилиты остается. Или библиотеки для других языков как-то универсально пишут если это возможно?

Alexoy ()
Ответ на: комментарий от Alexoy

ну просто есть биндинги-библиотеки для работы с базой для разных языков. Не совсем ясно, что по-вашему разного в базе с процессом и в базе без процесса.

ipeacocks ★★★★★ ()
Ответ на: комментарий от ipeacocks

имел в виду, что для взаимодействия с базой используются функции из библиотеки.. т.е. можно использовать только то, что доступно в конкретной библиотеке, которая поверх проекта на С как в случае SQLite. А в этом С коде может быть куда больше возможностей, включая добавки из новых версий. Если автор биндинг-библиотеки не предусмотрел возможность использовать что-то из новой версии SQLite, то нам это не будет доступно? Или там как-то по другому это работает?

Alexoy ()
Последнее исправление: Alexoy (всего исправлений: 2)

В sqlite3_db_config() добавлена опция SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER которая позволяет включить или выключить двух-аргументную версию SQL функции fts3_tokenizer() в рантайме.

Когда коту делать нечего он яйцы лижет. Это я к тому что эта фича в 3.9 была, в 3.10 её выпилили, а теперь гордо запилили обратно. Я пол дня не мог понять почему у меня всё сломалось, а оказалось что из-за того что токенайзер выпилили. Пришлось какое-то время назад откатывать до 3.9.

PS: Хотя может это конечно гентупроблемы были.

Loki13 ★★★★★ ()
Ответ на: комментарий от Alexoy

Если автор биндинг-библиотеки не предусмотрел возможность использовать что-то из новой версии SQLite, то нам это не будет доступно?

Ну это прежде всего реалищация SQL, так что в чём проблема-то?

be_nt_all ()
Ответ на: комментарий от be_nt_all

Наверно не так обьясняю. Это не проблема, а вопрос. Вот в новости.. добавили новые опции там-то, новые интерфейсы там-то, увеличили одно, сократили другое - ведь это всё в конкретном файлике, например, в sqlite3.c - как все эти нововведения появляются в биндинг-библиотеках в других языках?

Alexoy ()
Ответ на: комментарий от Alexoy

Ну, большинство изменений, я смотрю, затрагивают SQL, внутреннюю реализацию, но никак не C-API.

#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004

перенести не проблема от слова «совсем», остаётся только предназначенная для отладки SQL функция sqlite3_system_errno — тут чуть-чуть сложнее, надо расширить биндинг библиотеки к языку на одну функцию без аргументов.

be_nt_all ()
Ответ на: комментарий от Alexoy

Ну обычно можно же и без обвязок работать с базой, но это не хорошо на самом деле.

ipeacocks ★★★★★ ()
Ответ на: комментарий от Alexoy

добавили новые опции там-то, новые интерфейсы там-то, увеличили одно, сократили другое - ведь это всё в конкретном файлике, например, в sqlite3.c - как все эти нововведения появляются в биндинг-библиотеках в других языках?

Если изменения в API, то только когда/если реализуют в биндингах. А если добавилась новая PRAGMA, то это обычный SQL-запрос.

BlackRaven86 ()
Ответ на: комментарий от BlackRaven86

Что я покачто понял (или нет) в работе этого всего:

1) есть готовый бинарник sqlite3, скомпилированный из С исходников
2) есть библиотека на другом языке, которая использует этот бинарник в стиле os.system(.....), заставляя его выполнять ту или иную команду
3) если вышла новая версия sqlite - компилируем бинарник заново и библиотека начинает использовать уже его
4) если изменения в API, то по любому надо переделывать библиотеку, чтоб добавить\убрать новую функцию; а если изменения внутренние, то по сути без разницы и всё будет так само работать и с новым бинарником

Правильно понял? Если да, то это единственная схема работы с такими вещами как sqlite?

Или можно и напрямую исходники sqlite использовать в других языках без компиляций?!

Alexoy ()
Ответ на: комментарий от Alexoy

Как-то то это костыльно выглядит - использовать бинарник, логичнее использовать библиотеку. Если под бинарником понимается утилита sqlite3, а не библиотека libsqlite3.

Скомпилированная новая версия библиотеки может работать с биндингами от старой, если есть бинарная совместимость. Обычно бинарную совместимость стараются ломать только в мажорных версиях.

Чтобы задействовать новый функционал API придется биндинги менять, конечно.

Или можно и напрямую исходники sqlite использовать в других языках без компиляций?!

Без компиляции исходники sqlite можно использовать только в текстовом редакторе :D

BlackRaven86 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.