SimpleBase - быстрая JSON-ориентированная безсерверная СУБД

SimpleBase - быстрая JSON-ориентированная безсерверная СУБД

DmitryfVorontsov

Представляю еще один продукт в линейке Simple(в которую входят SimpleUI, SimpleWEB, Simple для слабых устройств и так же коммерческие продукты Simple.Kit) – SimpleBase. Да, настало время обзавестись собственной СУБД и ниже я расскажу причины такого решения. SimpleBase – это JSON-ориентированная NoSQL СУБД, безсерверная с интерфейсом пока на Python (pysimplebase), но позже будет и нативная на Java. OpenSource естественно.

В чем суть?

Simple, как следует из названия, это средства для упрощенной разработки бизнес-решений. Хранение является важной частью решений. Но SQL, который чаще всего используется для решений, нельзя назвать симпл. В случае 1-2-3 табличками и простыми селектами разница с JSON небольшая, но в более сложных решениях с большим количеством таблиц и в 3NF, Бойса Кодда разрабатывать уже не так легко. Кроме того в SQL типизированные и фиксированные описания таблиц и вносить изменения при разработке по agile не очень комфортно.

Всех этих недостатков лишен NoSQL. Более того, так как обработчики на Python, JSON-ориентированные СУБД прекрасно ложатся в эту концепцию, так как JSON идеально сериализуется во внутренние классы Python – Dict и List и по сути работая со словарями и списками вы работаете напрямую с JSON и наоборот. Ни в каком другом языке такой халявы нет. Это конкретно в JSON-ориентированных СУБД (есть документоориентированные, но не JSON)

Всем хороши такие СУБД кроме одного недостатка – они медленные в силу своей текстовости. SQL быстрый, но сложный и не гибкий, а JSON-NoSQL всем хороши но медленные. Точнее так: большие серверные документоориентированные СУБД , такие как эталон класса – MongoDB, всем хороши – они и быстры и простые, но они серверные. А нужно хранение в мобильном решении (сразу напишу что Realm от Mongo совсем не годится – не JSON) . Из безсерверных на Python я рекомендовал и встроил в одном из последних релизов TinyDB, но она как раз и показывает этот недостаток - та самая сериализация/десериализация JSON и отжирает основное время. Ну и кроме того в Tiny нет нормальных транзакций, нет многопользовательской работы, индексов и много чего еще без чего нельзя работать.

В качестве критерия я все проверяю на миллионном тесте. Меня как минимум интересует производительность в нескольких ключевых участках:

1)     Добавление записи в большую таблицу. Оно должно быть мгновенным. В таблицу с миллионом записей вставка должна быть в пределах нескольких миллисекунд. Иначе это приводит либо к фризами либо надо выносить это в асинхрон, а смысл? Тогда появляются новые проблемы

2)     Поиск по точному соответствию в большой таблице. Например у вас товаров 1 млн, вы сканируете штрихкод и надо найти запись товара. Мгновенно. Да это должно быть решено с помощью индексов. Но в SQLite с 1млн. это тоже решается только на индексах, потому что без индексов это занимает 5 секунд, что для сканера не годится

3)     Поиск в большой таблице по вхождению. Подстроки в строку – когда набираете первые буквы названия товара например. Это тоже должно быть мгновенно.

В общем с помощью нескольких трюков мне удалось закрыть все эти ключевые потребности на 100% совместив простоту JSON со скоростью SQL. По сути – это 100% архитектурное решение, а не уловки конкретного стека реализации, на Java это работает точно так же. И это все в обертке синтаксиса почти как в MongoDB чтобы долго не переучиваться. Ну или как TinyDB, все подобные NoSQL похожи.

Что дальше?

В ближайший релиз будет добавлена питоновская pysimplebase в том виде в котром она представлена сейчас. И далее в следующих релизах будет реализованы еще нативные на Java методы для более тесной интеграции – встраивания в нативные обработчики (как сейчас с SQL) и т.д. Т.е. можно будет работать и из Python через pysimplebase и из любых других обработчиков через стек переменных или вызов нативных обработчиков. Напомню, нативные нужны например для глубокой фоновой работы, когда приложение свернуто, не имеет контекста и Питон не запущен.

Ссылки:

GitHub: https://github.com/dvdocumentation/simplebase

Документация: https://simplebase.readthedocs.io/en/latest/#

Pypi: https://pypi.org/project/pysimplebase/ 

Report Page