Дата премьеры системы: | 2015/04/20 |
Дата последнего релиза: | 2016 |
Технологии: | СУБД |
Содержание |
RethinkDB - документо-ориентированная СУБД, ориентирована на хранение данных в формате JSON и предоставляющая специализированный язык запросов ReQL. Продукт создается и разрабатывается сообществом OpenSource.
2015
RethinkDB 2.0
20 апреля 2015 года стало известно о выпуске релиза СУБД RethinkDB 2.0[1].
Этот релиз публикуется как первый, пригодный для промышленного внедрения. Код СУБД написан на языке C++ и распространяется под лицензией AGPLv3. Библиотеки для работы с RethinkDB официально предоставляются для JavaScript, Python и Ruby, неофициально сообщество развивает драйверы для других языков, включая C++, PHP, Perl и Go.
Основное отличие RethinkDB от других СУБД - реализация обратной модели доставки результатов запроса. В традиционной модели "запрос-ответ" для отслеживания изменений требуется периодическая повторная отправка запросов. RethinkDB позволяет подписаться на изменения (push-архитектура), и тем самым даёт возможность отправить запрос один раз и в live-режиме непрерывно получать информацию об изменениях, связанных с этим запросом результатов. Подобный подход информирования приложения об изменениях помогает упростить архитектуру приложений, обрабатывающих данные в режиме реального времени и уйти от использования внешних очередей сообщений.
Еще одна особенность RethinkDB - язык запросов ReQL, он интегрируется в объектную модель различных языков программирования. При использовании ReQL запросы формируются в форме обращения к объекту, например, для отслеживания изменений в таблице, в который поле "db" равно "prod", можно выполнить "r.db('rethinkdb').table('stats').filter({ 'db': 'prod' }).changes().run(conn)", а для выборки записей, в которых значение поля "episodes" больше 100 - "r.table('tv_shows').filter(r.row('episodes').gt(100))". ReQL поддерживает создание таблиц (каждая запись может иметь свою структуру), группировку результатов, агрегатные функции, возможность использования в запросах кода на JavaScript и регулярных выражений. Для обработки JavaScript-функций используется движок V8.
Скриншот окна управления СУБД, 2015
Некоторые отличия
- Возможность управления работой СУБД, в том числе анализ статистики и перенос данных между узлами в кластере, через встроенный веб- или CLI-интерфейс.
- API для монтиринга за работой СУБД;
- Удобная система настройки репликации на другой сервер или шардинга данных в кластере. Поддержка как асинхронной, так и синхронной репликации;
- Механизм кэширования запросов с произвольной настройкой размера кэша;
- Возможность подсоединения клиента к любому узлу кластера. Все запросы будут автоматически маршрутизированы на нужные узлы. Если запросом охвачены данные на нескольких узлах, то запрос будет разделён на подзапросы к разным серверам, которые будут выполнены параллельно, а затем агрегированы для получения сводного результата;
- Использование механизма map-reduce;
- Размещение данных в B-Tree и хранение с использованием лог-подобных структур, созданных с оглядкой на архитектуру Btrfs. Наличие выполняемого в фоне инкрементального сборщика мусора и упаковщика данных. Гарантирование непротиворечивости данных после сбоя;
- Гибкая система индексов с поддержкой первичных и вторичных ключей, геопространственных индексов, возможностью индексации по произвольным выражениям. Каждый запрос может использовать только один индекс.
Представление СУБД RethinkDB 2.0, 2015
Официальный сайт продукта - rethinkdb.com
Вышел релиз версии RethinkDB 2.1
11 августа 2015 года стал доступен релиз документо-ориентированной СУБД RethinkDB 2.1[2].
Представление RethinkDB 2.1, 2015
Версия 2.1 примечательна средствами обеспечения высокой доступности и значительной переработкой инструментов кластеризации. Среди добавленных возможностей:
- режим автоматической замены сбойных узлов в кластере,
- поддержка добавления и удаления узлов без остановки работы кластера,
- Asynchronous API для выполнения запросов в асинхронном режиме (клиентская поддержка реализована через EventMachine в Ruby и Twisted, Tornado и через asyncio в Python),
- поддержка соединения клиентов с использованием шифрованного канала связи,
- математические команды в ReQL (floor, ceil и round).
2016
RethinkDB 2.3
Весной 2016 года стал доступен релиз документо-ориентированной СУБД RethinkDB 2.3, обеспечивающей хранение данных в формате JSON, предоставляющей специализированный язык запросов ReQL и реализующей модель подписки на изменения (возможность отправить запрос один раз и получать информацию об изменении результатов). Подробнее о возможностях RethinkDB можно прочитать в анонсе прошлого выпуска. Код СУБД написан на языке С++ и распространяется под лицензией AGPLv3.
Ключевые улучшения:
- Встроенная поддержка TLS для шифрования как клиентских соединений с БД так и соединений между серверами в кластере. Кроме того, обеспечена возможность применения HTTPS для работы со встроенным управляющим web-интерфейсом;
- Система разделения привилегий, позволяющая создавать отдельных пользователей и наделять их определёнными полномочиями доступа к данным. Права доступа задаются на уровнях кластера, БД и отдельных таблиц и регулируют возможность совершения операций добавления, изменения, удаления и чтения документов, а также доступа к изменению настроек и установке сетевых соединений;
- В язык ReQL добавлена новая команда "fold", которая позволяет выполнить операции отсеивания диапазона значений в упорядоченных потоках данных. В отличие от команды "reduce" операции "fold" выполняются над упорядоченными потоками. Опционально поддерживается возможность присоединения к выводу массива элементов, заданного через необязательный параметр "emit";
- Добавлена поддержка работы на платформе Windows.
Примечания
Подрядчики-лидеры по количеству проектов
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
Распределение систем по количеству проектов, не включая партнерские решения
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)
![](/skins/ta/img/0.gif)