Задача такая: искал Open Source БД для своего пет-проекта. Решил посмотреть в интернете новые решения в рамках БД. После чтения статей и отбора из 6-7 БД остались три (3), которые понравились лично мне.
Почему именно эти? Во-первых, они Open Source, а во-вторых, у них есть ответы на два главных моих вопроса «Для чего это нужно?» и «Работает ли из коробки?».
Давайте покажу на примерах.
Начнём с Dolt.
Dolt
Как пишут в маркетинговых материалах:
«База данных, вдохновлённая концепцией ветвления из Git. Dolt позволяет создавать ветки базы данных для экспериментов и тестирования, что упрощает разработку и интеграцию изменений без риска для основной базы данных»
Так ли это на самом деле?
Что по установке?
Процесс установки похож на клонирование проекта с GitHub — в начале dolthub попросит заполнить настройки global.
Процесс достаточно простой, инструкция подробная и удобная.
В целом, довольно понятная и интересная архитектура и управление ветками как в git.
Какие минусы?
Dolt мне кажется интересной БД. Понравилось. Но не без минусов.
В одной из статей описывалось, что Dolt работает с большими данными, а по факту не совсем так. Например, загрузка 1 ГБ данных может вызвать зависания или замедление работы. Это может быть связано с тем, что Dolt необходимо отслеживать изменения и управлять версиями, что увеличивает накладные расходы на ресурсы. Поэтому и вердикт такой — эта БД не подходит для работы с большими объемами данных и сложными запросами.
Второе — при выполнении сложных запросов, особенно если они включают объединения (JOIN), агрегации или подзапросы, Dolt может зависать или давать длительный отклик. Это связано с тем, что система должна обрабатывать и отслеживать множество изменений в данных, что требует значительных вычислительных ресурсов.
А механизмов оптимизации, как у более зрелых реляционных баз данных, вроде PostgreSQL, у Dolt, скорее всего, нет, что и приводит к медленной обработке запросов и увеличенному времени ожидания.
У Dolt есть офлайн-версия, я тестировал онлайн-версию. Но, в целом, не имеет особого значения будет она на сервере работать или локально, так как вычислительные ресурсы будут использоваться там, где ты выполняешь операции. Поэтому минус остаётся на месте.
Кроме того, стоит отметить, что Dolt сталкивается с проблемами интеграции: по сравнению с более традиционными решениями, такими как PostgreSQL и MySQL, у Dolt значительно меньше доступных инструментов и интеграций. Не критично, конечно, но всё же.
Тем не менее, Dolt интересен для аналитической работы. Можно делать отдельные ветки для данных и экспериментировать с ними, при этом основной ветке ничего не будет. Интересно в контексте анализа данных, например, когда нужно провести эксперименты с небольшим набором данных, не опасаясь нарушить основную информацию.
Yugabyte
Официальная информация.
«Открытая распределённая база данных на основе PostgreSQL, поддерживающая горизонтальное масштабирование и высокую доступность. Yugabyte позволяет использовать SQL и NoSQL подходы, что делает её универсальным решением для различных приложений»
Теперь неофициальная.
Установка и настройка
Достаточно прозрачный процесс, всё написано в документации: скачал пакет, распаковал, запустил:
После установки и запуска сразу поднимается UI на котором можно отслеживать все параметры.
Запросы и работа аналогично как и с Dolt, всё просто и удобно.
Посмотрел, изучил, всё хорошо, но есть пара вопросов.
Кто такие?
Есть такая такая информация про ребят.
«Yugabyte, Inc. была основана в 2016 году группой инженеров, которые ранее работали в таких компаниях, как Facebook, Google и LinkedIn. Их цель заключалась в создании базы данных, которая смогла бы справляться с растущими потребностями современных приложений и предоставлять надежность, масштабируемость и производительность»
Вроде ничего криминального: поработали в IT-гигантах и решили открыть свой стартап. Нормальная история, да и продукт норм.
Но дело в том, что Yugabyte — это PostgreSQL. Это, конечно, секрет Полишинеля, ведь они и сами на своих ресурсах прямо об этом пишут.
Возникает вопрос:
Зачем нужен новый шильдик поверх PostgreSQL? За счет чего она лучше обычного PostgreSQL? Это же не автомобиль, чтобы на него шильдик клеить?
Однако есть одно «но».
YugabyteDB разработан как распределённая база данных, позволяющая легко масштабировать как хранение, так и обработку данных путём добавления новых узлов в кластер. Это позволяет справляться с увеличением нагрузки без значительных затрат времени и ресурсов.
А PostgreSQL в традиционном виде масштабируется вертикально, что может быть дорого и ограничивает максимальные объёмы данных, которые можно обрабатывать. И в Postgres Pro возможности по созданию распределённых систем ограничены.
Чтобы масштабироваться горизонтально в PostgreSQL, необходимо использовать сторонние решения, такие как Citus (дополнение для PostgreSQL, позволяет делить данные по нескольким узлам).
В YugabyteDB всё это «в коробке».
Плюс YugabyteDB обеспечивает автоматическую репликацию данных и их распределение по различным узлам, что позволяет минимизировать время простоя и гарантировать доступность даже в случае сбоя одного или нескольких узлов.А PostgreSQL требует настройки репликации и управления восстановлением, что может быть сложным и времязатратным процессом.
Что мне понравилось
Что мне понравилось в YugabyteDB, так это наличие двух интерфейсов: YSQL (для реляционных данных) и YCQL (для работы с документами и ключ-значение). В PostgreSQL работы с несколькими моделями данных в одном решении нет.
MeiliSearch
Официальная информация.
«Открытый поисковый движок, обеспечивающий высокую скорость поиска и простоту интеграции. Он может быть использован в различных проектах для быстрого и эффективного полнотекстового поиска».
Неофициальная.
Установка
Процесс достаточно простой и удобный.
После запуска появляется удобный UI для работы.
В MeiliSearch нет концепции таблиц в традиционном смысле, как в реляционных базах данных. Вместо этого MeiliSearch работает с индексами, которые представляют собой коллекции документов. Чтобы создать «таблицу» в MeiliSearch, нужно создать индекс и добавить в него документы, а уже потом они будут доступны для поиска в UI.
А зачем?
И здесь ситуация аналогична с предыдущей БД.
Зачем она нужна когда есть Elasticsearch?
Они вроде очень похожи? Да и под публикациями о MeiliSearch я видел, что их сравнивали.
Да, у MeiliSearch есть (основная) проблема с «пухнущим» индексом— он не осуществляет автоматическую очистку данных. Это приводит к тому, что индекс может значительно увеличиваться в размере с течением времени, особенно при частых обновлениях или удалениях документов. В результате можно столкнуться с проблемой значительного увеличения объёма используемого дискового пространства.
Но…
Elasticsearch у нас, это распределённая поисковая и аналитическая система. Она предназначена для обработки и анализа больших объёмов данных в реальном времени и поддерживает сложные запросы.
А MeiliSearch — это легковесный полнотекстовый поисковый движок. У него другая задача. MeiliSearch разработали французы, компания Meili. И, как они пишут на своём ресурсе, основная цель — «создать быстрый, удобный и открытый инструмент для полнотекстового поиска, который можно легко интегрировать в различные приложения»
Вот эту цель они закрыли, как мне кажется. У MeiliSearch фокус на простоте интеграции и быстроте поиска, а не аналитических «способностях». Он ориентирован на то, чтобы быстро внедрить функциональность поиска в приложения. Поэтому спроектирован достаточно просто: интуитивно понятный API, легкая установка, сложных настроек нет, а полнотекстовый поиск работает «из коробки». В этом он лучше Elasticsearch, потому что доступен даже для новичков.
Самый главный вопрос это, конечно же, лицензия
Да, компании могут использовать MeiliSearch, Dolt и YugabyteDB бесплатно, однако с некоторыми оговорками в зависимости от конкретного проекта и лицензий.
MeiliSearch. Можно брать бесплатно в любые проекты, включая коммерческие. Лицензия MIT не накладывает ограничений на использование, модификацию или распространение кода, что делает его привлекательным.
Dolt. Также можно использовать бесплатно, включая «коммерцию». Apache License 2.0 также не накладывает ограничений на использование, но требует соблюдения условий лицензии, таких как указание авторских прав и уведомление о лицензии.
YugabyteDB. Аналогично — бесплатно. Однако стоит отметить, что в Yugabyte есть как бесплатная Community Edition, так и платные версии с дополнительными функциями и поддержкой.
Если вам понравится такой формат, то с радостью поделюсь с вами другими 3мя вариантами.
Комментарии (14)
vadim_bv
31.10.2024 10:05Вы бы хотя круг задач, для чего вам БД, вначале очертили. Почему вам не годится ванильный Постгрес, Clickhouse, да даже SQLite, из статьи не понятно.
Ну и чем привлекательна Yuga по сравнению с Greenplum, к примеру (ну да, слива перестала быть OpenSource)?vladislav_shevchenko Автор
31.10.2024 10:05Спасибо за вопрос, в будущих статьях постараемся более подробно расписать проблему.
Что касается ванильных решений, то в статье мы подсветили проблему постгреса, что он имеет по большей части только вертикальное масштабирование и более сложную настройку, ClickHouse не подойдет для OLTP, SQLite не предназначен для высоконагруженных приложений - но тут согласен нужно было все эти минусы расписать и почему мы их не рассматривали.
Что касается Greenplum - YugabyteDB предлагает истинное горизонтальное масштабирование, позволяя легко добавлять узлы и обрабатывать большие объёмы данных. Greenplum также может работать с большими данными, но его масштабирование чаще всего требует сложной настройки и управления.
Cordekk
31.10.2024 10:05Хотел было вставить картинку с PG для всех задач, но вижу ваше описание YugabyteDB, и понимаю, что надо бы картинку перерисовать.
Спасибо за обзор!vladislav_shevchenko Автор
31.10.2024 10:05Спасибо за фидбек!
Но для всех задач, есть одно решение Excel)
Farrux28
31.10.2024 10:05А в юге есть поддержка миграции из постгреса?
И обратно из юги в случае форс мажора какого нибудь?
piton_nsk
Спасибо за обзор. Все-таки поиск "новых решений" зачем был, пощупать руками что есть нового или мейнстрим не подходит по каким-то причинам?
vladislav_shevchenko Автор
Спасибо за обратную связь, хотелось просто понять, что из себя представляют новые решения, и могут ли они заменить классические варианты.