RethinkDB
RethinkDB — вільна документо-орієнтована система керування базами даних зі збереженням даних у форматі JSON і спеціалізованою мовою запитів ReQL. Сирцевий код СКБД написаний мовою С++ і поширюється під ліцензією AGPLv3. Бібліотеки для роботи з RethinkDB офіційно надаються для JavaScript, Python і Ruby, неофіційно співтовариством розвиваються драйвери для багатьох інших мов, включаючи C++, PHP, Perl і Go.
Тип | Distributed database management systemd |
---|---|
Перший випуск | 24 липня 2009[1] |
Версії | 2.4.1 (14 серпня 2020)[2] |
Репозиторій | github.com/rethinkdb/rethinkdb |
Операційна система | Unix, Linux, OS X, BSD |
Мова програмування | C++, JavaScript, Bash |
Доступні мови | англійська |
Стан розробки | активний |
Ліцензія | AGPL |
Вебсайт | rethinkdb.com |
Огляд
Ключовою відмінністю RethinkDB від інших СКБД є реалізація зворотної моделі доставки результатів запиту.[3] Якщо традиційна модель «запит-відповідь» вимагає для відстеження змін періодичної повторної відправки запитів, то 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.
Деякі інші особливості RethinkDB:
- Можливість управління роботою СКБД, у тому числі аналіз статистики і перенесення даних між вузлами в кластері, через вбудований веб- або CLI-інтерфейс.
- API для моніторингу за роботою СКБД;
- Зручна система настройки реплікації на інший сервер або шардинга даних в кластері. Підтримка як асинхронної, так і синхронної реплікації;
- Механізм кешування запитів з довільним налаштуванням розміру кешу;
- Можливість під'єднання клієнта до будь-якого вузла кластера. Всі запити будуть автоматично маршрутизуватися на потрібні вузли. Якщо запитом охоплені дані на кількох вузлах, то запит буде розділений на підзапити до різних серверів, які будуть виконані паралельно, а потім агреговані для отримання зведеного результату;
- Можливість використання механізму map-reduce;
- Розміщення даних в B-Tree і зберігання з використанням лог-подібних структур, створених з оглядкою на архітектуру Btrfs. Наявність виконуваного в тлі інкрементального збирача сміття і пакувальника даних. Гарантування несуперечності даних після збою;
- Гнучка система індексів з підтримкою первинних і вторинних ключів, геопросторових індексів, можливістю індексації по довільним виразами. Кожен запит може використовувати тільки один індекс.
Примітки
- Jeremy Zawodny, RethinkDB: Rethinking the Database using Modern Assumptions, Linux Magazine, August 24, 2009
- Release 2.4.1 — 2020.
- Выпуск СУБД RethinkDB 2.0 // opennet.ru