Upgrade to Pro — share decks privately, control downloads, hide ads and more …

02 Xodus - a Database to Store Youtrack Bugs. M...

02 Xodus - a Database to Store Youtrack Bugs. Maxim Mazin, YouTrack Team Lead

JetBrainsRU

May 17, 2018
Tweet

More Decks by JetBrainsRU

Other Decks in Programming

Transcript

  1. Максим Мазин, Team Lead в YouTrack “Xodus” — база данных,

    в которой YouTrack хранит баги — JetBrains Open Day Moscow
  2. Журнал — Kotlin DSL Transient Entities Queries Object Graph Key-Value

    Store Log File System 00000000000.xd 8 MB 00000000800.xd 8 MB 00000001000.xd < 8 MB Запись
  3. • Окружение jetbrains.exodus.env. Environment • Ассоциативный массив jetbrains.exodus.env. Store •

    Byte[ ] → Byte[ ] • Byte[ ] → (Byte[ ], Byte[ ], …) • get, put, add, delete • Курсоры • Транзакция jetbrains.exodus.env. Transaction Хранилище пар «ключ-значение» — Kotlin DSL Transient Entities Queries Object Graph Key-Value Store Log File System
  4. • B-дерево • Базисное дерево • Мета-дерево Деревья — Kotlin

    DSL Transient Entities Queries Object Graph Key-Value Store Log File System
  5. Базисное дерево — Kotlin DSL Transient Entities Queries Object Graph

    Key-Value Store Log File System P N Y O L A L L S T Префиксное дерево P N Y O LA LL ST Базисное дерево
  6. Сборка мусора — Kotlin DSL Transient Entities Queries Object Graph

    Key-Value Store Log File System 00000000000.xd 00000000800.xd 00000001000.xd 00000000000.xd 00000000800.xd 00000001000.xd 00000000000.xd 00000001000.xd
  7. Граф объектов — Kotlin DSL Transient Entities Queries Object Graph

    Key-Value Store Log File System login: String name: String age: Short local ID: Long User Group name: String local ID: Long groups avatar: Byte[ ] login name age Indices
  8. Идентификаторы — Kotlin DSL Transient Entities Queries Object Graph Key-Value

    Store Log File System property ID = 1: String property ID = 2: String property ID = 3: Short local ID: Long type ID = 1 type ID = 2 property ID = 2: String local ID: Long link ID = 1 blob ID = 1: Byte[ ] property ID = 1 property ID = 2 property ID = 3 Indices type ID User — 1 Group — 2 property ID login — 1 name — 2 age — 3 link ID groups — 1 blob ID avatar — 1
  9. OKVM — Kotlin DSL Transient Entities Queries Object Graph Key-Value

    Store Log File System type name 㲗 ID property name 㲗 ID link name 㲗 ID blob name 㲗 ID IDs local ID → ID property value (local ID, property ID) → value property index (property ID, value) → local ID not null property index property ID → local ID link value & index (local ID, link ID) 㲗 (link ID, type ID, local ID) blob value (local ID, blob ID) → file name not null blob index blob ID → local ID Для каждого типа
  10. • Операции • Вычитание, пересечение, объединение, значения поля, сортировка и

    т.д. • Кэширование Итераторы — Kotlin DSL Transient Entities Queries Object Graph Key-Value Store Log File System
  11. Планировщик запросов — Kotlin DSL Transient Entities Queries Object Graph

    Key-Value Store Log File System union intersect intersect allIssues allIssues visibleFor visibleFor filter visibleFor
  12. • Ограничения • Значения атрибутов • Ссылочной целостности • Составные

    ключи • Двунаправленные ассоциации и агрегации • Наследование Метаданные — Kotlin DSL Transient Entities Queries Object Graph Key-Value Store Log File System
  13. • Проверка ограничений • Нотификации • Оптимистическая блокировка • Накопление

    изменений • Перепроигрывание транзакции Транзакции — Kotlin DSL Transient Entities Queries Object Graph Key-Value Store Log File System
  14. 1. Параллельное чтение / запись из разных процессов 2. Улучшение

    оптимизации плана запроса 3. Android Планы —