Нещодавно було оголошено, що Яндекс випустив вихідний код своєї СУБД "YDB" , яка реалізує підтримку діалекту SQL та транзакцій ACID.
СУБД була створена з нуля та спочатку розроблена з метою забезпечення відмовостійкості , автоматичного відновлення після збоїв та масштабованості. Варто зазначити, що Яндекс запустив робочі кластери YDB, що включають понад 10 000 вузлів, зберігають сотні петабайт даних та обробляють мільйони розподілених транзакцій за секунду.
Основні новинки YDB
Однією з ключових особливостей YDB є використання реляційної моделі даних з таблицями. YQL ( YDB Query Language) використовується для запитів та визначення схеми даних; це діалект SQL, адаптований для роботи з великими розподіленими базами даних . Під час створення схеми зберігання підтримується деревоподібне групування таблиць, подібне до каталогів у файловій системі. Для роботи з даними у форматі JSON передбачено API.
Також варто відзначити його здатність створювати відмовостійкі конфігурації , які продовжують функціонувати навіть у разі виходу з ладу дисків, вузлів, стійок і навіть окремих центрів обробки даних. YDB підтримує синхронне розгортання та реплікацію в трьох зонах доступності, зберігаючи при цьому справність кластера у разі збою зони.
Сумісність із доступом до даних через запити сканування, призначені для виконання спеціальних аналітичних запитів до бази даних, що виконуються в режимі лише для читання та повертають потік grpc.
Крім того, він також вирізняється тим, що зберігає дані безпосередньо на блокових пристроях, використовуючи вбудований компонент PDisk та рівень VDisk. Окрім VDisk, працює DSProxy, який аналізує доступність та продуктивність дисків, щоб виключити їх у разі виявлення проблем.
Інші помітні особливості включають:
- Гнучка архітектура, яка дозволяє створювати різні сервіси поверх YDB, аж до віртуальних блочних пристроїв і постійних черг. Придатність для різних типів навантаження: OLTP і OLAP (аналітичні запити).
- Підтримка багатокористувацьких (багатьох орендарів) і безсерверних конфігурацій.
- Можливість аутентифікації клієнтів. Користувачі можуть створювати власні віртуальні кластери та бази даних на загальній спільній інфраструктурі, враховуючи споживання ресурсів з точки зору кількості запитів і розміру даних, або шляхом оренди/резервування певних обчислювальних ресурсів і місця для зберігання.
- Можливість коригувати термін служби записів для автоматичного видалення застарілих даних.
- Взаємодія з СУБД і подача запитів здійснюється за допомогою інтерфейсу командного рядка, інтегрованого веб-інтерфейсу або YDB SDK, який надає бібліотеки для C++, C# (.NET), Go, Java, Node.js, PHP і Python.
- Автоматично відновлюватися після збоїв із мінімальною затримкою для програм і автоматично підтримувати задане резервування під час зберігання даних.
- Автоматичне створення індексів на первинному ключі та можливість визначення вторинних індексів для підвищення ефективності довільного доступу до стовпців.
- Горизонтальна масштабованість. У міру зростання навантаження та розміру збережених даних кластер можна розширити, просто підключивши нові вузли. Рівні обчислень і зберігання розділені, що дозволяє окремо масштабувати обчислення та сховище. Сама СУБД контролює рівномірний розподіл даних і навантаження з урахуванням наявних апаратних ресурсів. Можна реалізувати географічно розподілені конфігурації, які охоплюють декілька центрів обробки даних у різних частинах світу.
- Підтримка моделі сильної узгодженості та транзакцій ACID під час обробки запитів, які охоплюють декілька вузлів і таблиць. Щоб підвищити продуктивність, ви можете вибірково вимкнути перевірку узгодженості.
- Автоматична реплікація даних, автоматичне розділення (розбиття на розділи, шардінг) при збільшенні розміру або навантаження, а також автоматичне балансування завантаження та даних між вузлами.
Насамкінець варто зазначити, що YDB використовується в проектах Яндекса, код написаний на C/C++ та розповсюджується за ліцензією Apache 2.0. Вихідний код, а також більше деталей про нього, можна знайти за наступним посиланням.