RethinkDB

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
RethinkDB
Тип Distributed database management systemd
Перший випуск 24 липня 2009[1]
Операційна система Unix, Linux, OS X, BSD
Мова програмування C++, JavaScript, Bash
Доступні мови англійська
Стан розробки активний
Ліцензія AGPL
Репозиторій github.com/rethinkdb/rethinkdb
Вебсайт rethinkdb.com

RethinkDB — вільна документо-орієнтована система керування базами даних зі збереженням даних у форматі JSON і спеціалізованою мовою запитів ReQL. Сирцевий код СКБД написаний мовою С++ і поширюється під ліцензією AGPLv3. Бібліотеки для роботи з RethinkDB офіційно надаються для JavaScript, Python і Ruby, неофіційно співтовариством розвиваються драйвери для багатьох інших мов, включаючи C++, PHP, Perl і Go.

Огляд[ред. | ред. код]

Ключовою відмінністю RethinkDB від інших СКБД є реалізація зворотної моделі доставки результатів запиту.[2] Якщо традиційна модель «запит-відповідь» вимагає для відстеження змін періодичної повторної відправки запитів, то 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. Наявність виконуваного в тлі інкрементального збирача сміття і пакувальника даних. Гарантування несуперечності даних після збою;
  • Гнучка система індексів з підтримкою первинних і вторинних ключів, геопросторових індексів, можливістю індексації по довільним виразами. Кожен запит може використовувати тільки один індекс.

Примітки[ред. | ред. код]

Посилання[ред. | ред. код]