На сегодняшний день две мои самые любимые темы — SQLite и key-value базы данных. И в этот раз я пишу сразу про обе: этот пост посвящён Python-обёртке для используемого в SQLite 4 key-value хранилища на основе
LSM.
Я не слишком внимательно отслеживаю релизы SQLite, но версия 3.8.11 привлекла моё внимание, поскольку в её описании заявлено серьёзное увеличение производительности по сравнению с 3.8.0. В сопроводительной информации я наткнулся на упоминание о новом экспериментальном расширении для полнотекстового поиска (
о котором писал когда-то), и потому мне стало интересно, какая складывается ситуация с
SQLite 4.
Изучив доступную информацию, я обратил внимание, что одной из задач разработчиков было обеспечить в новых версиях
интерфейс для подключаемых движков баз данных. На момент написания этого поста в SQLite 4 уже было два встроенных бэкенда, один из которых — key-value хранилище на основе LSM. В последние пару месяцев мне доводилось поиграться с
Cython, пока я писал Python-обёртку для встроенных k-v хранилищ
UnQLite и
Vedis. И я подумал, что было бы неплохо применить Cython для создания интерфейса движка БД на основе LSM, используемого в SQLite 4.
Разобравшись с
исходным кодом SQLite 4 и
крохотным заголовочным файлом LSM, я написал
python-lsm-db (
документация).