![image][1] На сегодняшний день две мои самые любимые темы — SQLite и key-value базы данных. И в этот раз я пишу сразу про обе: этот пост посвящён Python-обёртке для используемого в SQLite 4 key-value хранилища на основе [LSM][2]. Я не слишком внимательно отслеживаю релизы SQLite, но версия 3.8.11 привлекла моё внимание, поскольку в её описании заявлено серьёзное увеличение производительности по сравнению с 3.8.0. В сопроводительной информации я наткнулся на упоминание о новом экспериментальном расширении для полнотекстового поиска ([о котором писал когда-то][3]), и потому мне стало интересно, какая складывается ситуация с [SQLite 4][4]. Изучив доступную информацию, я обратил внимание, что одной из задач разработчиков было обеспечить в новых версиях [интерфейс для подключаемых движков баз данных][5]. На момент написания этого поста в SQLite 4 уже было два встроенных бэкенда, один из которых — key-value хранилище на основе LSM. В последние пару месяцев мне доводилось поиграться с [Cython][6], пока я писал Python-обёртку для встроенных k-v хранилищ [UnQLite][7] и [Vedis][8]. И я подумал, что было бы неплохо применить Cython для создания интерфейса движка БД на основе LSM, используемого в SQLite 4. Разобравшись с [исходным кодом SQLite 4][9] и [крохотным заголовочным файлом LSM][10], я написал [python-lsm-db][11] ([документация][12]). [Читать дальше →][13]
[1]:
https://habrastorage.org/getpro/habr/post_images/a68/ddf/3e6/a68ddf3e6b52165cae0448a58f3a6b37.png
[2]:
https://en.wikipedia.org/wiki/Log-structured_merge-tree
[3]:
http://charlesleifer.com/blog/building-the-sqlite-fts5-search-extension/
[4]:
http://sqlite.org/src4/doc/trunk/www/design.wiki
[5]:
http://sqlite.org/src4/doc/trunk/www/storage.wiki
[6]:
http://cython.org/
[7]:
http://unqlite-python.readthedocs.org/
[8]:
http://vedis-python.readthedocs.org/
[9]:
http://sqlite.org/src4/tree?ci=trunk
[10]:
https://github.com/coleifer/python-lsm-db/blob/master/src/lsm.h
[11]:
https://github.com/coleifer/python-lsm-db
[12]:
http://lsm-db.readthedocs.org/
[13]:
http://habrahabr.ru/post/274733/#habracut