Випуск розподіленої СУБД TiDB 3.0

доступний реліз розподіленої СУБД TiDB 3.0, що розвивається під враженням від технологій Google Шпильку и F1. TiDB відноситься до категорії гібридних систем HTAP (Hybrid Transactional/Analytical Processing), здатних як забезпечувати виконання транзакцій в реальному часі (OLTP), так і обробляти аналітичні запити. Проект написаний мовою Go та поширюється під ліцензією Apache 2.0

Особливості TiDB:

  • Підтримка SQL та надання клієнтського інтерфейсу, сумісного з протоколом MySQL, що спрощує адаптацію для TiDB існуючих програм, написаних для MySQL, а також дозволяє використовувати поширені клієнтські бібліотеки. Крім протоколу MySQL для звернення до СУБД можна використовувати API на базі JSON та конектор для Spark.
  • З можливостей SQL підтримуються індекси, агрегатні функції, вирази GROUP BY, ORDER BY, DISTINCT, злиття (LEFT JOIN/RIGHT JOIN/CROSS JOIN), уявлення, віконні функції та підзапити. Надані можливості достатньо для організації роботи з TiDB таких web-додатків, як PhpMyAdmin, Gogs та WordPress;
  • Можливість горизонтального масштабування та забезпечення відмовостійкості: розмір сховища та обчислювальну потужність можна нарощувати простим підключенням нових вузлів. Дані розподіляються на вузлах з надмірністю, що дозволяє продовжити роботу у разі збою окремих вузлів. Збої обробляються автоматично.
  • Система гарантує несуперечність і для клієнтського ПЗ виглядає як одна велика СУБД, незважаючи на те, що фактично для виконання транзакції залучаються дані з багатьох вузлів.
  • Для фізичного зберігання даних на вузлах можуть застосовуватись різні бекенди, наприклад, локальні двигуни зберігання GoLevelDB і BoltDB або власний двигун розподіленого сховища TiKV.
  • Можливість асинхронної зміни схеми зберігання, що дозволяє на льоту додавати стовпці та індекси без зупинки обробки поточних операцій.

Основні нововведення:

  • Проведено роботу зі збільшення продуктивності. У тесті Sysbench випуск 3.0 випереджає гілку 2.1 в 1.5 рази під час виконання операцій select і update, а тесті TPC-C в 4.5 разу. Оптимізації торкнулися різних видів запитів, включаючи підзапити «IN», «DO» та «NOT EXISTS», операції злиття таблиць (JOIN), використання індексів та багато іншого;
    Випуск розподіленої СУБД TiDB 3.0Випуск розподіленої СУБД TiDB 3.0

  • Додано новий двигун зберігання TiFlash, що дозволяє досягти більш високої продуктивності при вирішенні аналітичних завдань (OLAP) завдяки зберіганню в прив'язці до стовпців. TiFlash доповнює собою раніше пропоноване сховище TiKV, яке зберігає дані в розрізі рядків у форматі ключ/значення і більш оптимальне для обробки транзакцій (OLTP). TiFlash працює пліч-о-пліч з TiKV і дані продовжують як і раніше реплікуватися в TiKV з використанням протоколу Raft для визначення консенсусу, але для кожної групи реплік Raft створюється додаткова репліка, яка використовується в TiFlash. Подібний похід дозволяє досягти кращого поділу ресурсів між завданнями OLTP та OLAP, а також робить дані транзакцій миттєво доступними для аналітичних запитів;

    Випуск розподіленої СУБД TiDB 3.0

  • Реалізовано розподілений збирач сміття, що дозволяє суттєво підвищити швидкість складання сміття у великих кластерах та підвищити стабільність роботи;
  • Додано експериментальну реалізацію системи розмежування доступу на основі ролей (RBAC). Також забезпечено можливість завдання прав доступу для операцій ANALYZE, USE, SET GLOBAL та SHOW PROCESSLIST;
  • Додана можливість використання виразів SQL для вибрання з лога повільних запитів;
  • Реалізовано механізм швидкого відновлення видалених таблиць, що дозволяє відновити випадково видалені дані;
  • Уніфіковано формат записуваних логів;
  • Додано підтримку песимістичного режиму блокування, який робить обробку транзакцій ближчою до MySQL;
  • Додано підтримку віконних функцій (window-функції або аналітичні функції), сумісні з MySQL 8.0. Віконні функції дозволяють для кожного рядка запиту виконати обчислення за допомогою інших рядків. На відміну від агрегатних функцій, які згортають згрупований набір рядків в один рядок, віконні функції здійснюють агрегування на основі вмісту вікна, що включає один або більше рядків з результуючого набору. Серед реалізованих віконних функцій:
    NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE , LAST_VALUE, RANK, DENSE_RANK та ROW_NUMBER;

  • Додано експериментальну підтримку уявлень (VIEW);
  • Поліпшено систему секціонування (партикування), додано можливість розподілу даних по секціях на підставі діапазону значень або хешів;
  • Доданий фреймворк для розробки плагінів, наприклад, вже підготовлені плагіни для використання білого списку IP або ведення лога аудиту;
  • Забезпечено експериментальну підтримку функції «EXPLAIN ANALYZE» для побудови плану виконання SQL-запиту (SQL Plan Management);
  • Додано команду next_row_id для отримання ідентифікатора наступного рядка;
  • Додані нові вбудовані функції JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE та NAME_CONST.

Джерело: opennet.ru

Додати коментар або відгук