издание на разпределена СУБД , разработвана под впечатление от технологиите на Google и . TiDB принадлежи към категорията на хибридните системи HTAP (Хибридна Транзакционна/Аналитична Обработка), способни както да осигуряват изпълнение на транзакции в реално време (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 на такива уеб-приложения, като PhpMyAdmin, и WordPress;
- Възможност за хоризонтално мащабиране и осигуряване на устойчивост на повреди: размерът на хранилището и изчислителната мощност могат да се увеличават просто чрез свързване на нови възли. Данните се разпределят по възлите с излишък, позволяващ продължаване на работата при повреда на отделни възли. Повредите се обработват автоматично.
- Системата гарантира последователност и за клиентския софтуер изглежда като една голяма СУБД, независимо от факта, че за извършване на транзакции се привлекат данни от множество възли.
- За физическото съхранение на данни на възлите могат да се прилагат различни бекенди, например локални хранилища GoLevelDB и BoltDB или собствен механизъм за разпределено хранилище .
- Възможност за асинхронна промяна на схемата на съхранение, позволяваща на летяща добавяне на колони и индекси без спиране на обработката на текущите операции.
Основни :
- Работа е извършена по увеличаване на производителността. В теста Sysbench версия 3.0 надминава версия 2.1 с 1.5 пъти при изпълнение на операции select и update, а в теста TPC-C с 4.5 пъти. Оптимизациите засегнаха различни видове запитвания, включително подзапитвания „IN“, „DO“ и „NOT EXISTS“, операции за обединение на таблици (JOIN), използване на индекси и много други;
- Добавен е новият двигател за съхранение TiFlash, който позволява постигане на по-висока производителност при решаване на аналитични задачи (OLAP), благодарение на съхранение в колонен формат. TiFlash допълва предлаганото преди това хранилище TiKV, което съхранява данни ред по ред в формат ключ/стойност и е по-оптимално за обработка на транзакции (OLTP). TiFlash работи в синхрон с TiKV и данните продължават да се репликират в TiKV, използвайки протокола Raft за определяне на консенсуса, но за всяка група реплики Raft се създава допълнителна реплика, която се използва в TiFlash. Този подход позволява по-добро разпределение на ресурсите между OLTP и OLAP задачи и прави данните от транзакции моментално достъпни за аналитични запитвания;
- Реализиран е разпределен сборник на отходите, който позволява значително увеличаване на скоростта на събиране на отходи в големи клъстери и подобрява стабилността на работата;
- Добавена е експериментална реализация на система за управление на достъпа на базата на роли (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
