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

Avatar for JetBrainsRU

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 Планы —