Показать HN: ToplingDB — постоянное хранилище ключей и значений для внешнего хранилища ( github.com/topling ) Как создатель TerarkDB (приобретенного ByteDance в 2019 году), я разрабатывал ToplingDB в последние годы.
ToplingDB является ответвлением RocksDB, в котором мы заменили почти все компоненты более эффективными альтернативами (db_bench показывает, что ToplingDB примерно в 8 раз быстрее, чем RocksDB):
* MemTable: SkipList заменен на CSPP (Crash Safe Parallel Patricia trie), который в 8 раз быстрее.
* SST: BlockBasedTable заменен на ToplingZipTable, реализованный с помощью алгоритма сжатия с возможностью поиска, он очень маленький и быстрый, обычно менее 1 мкс на поиск:
* Ключи/индексы сжимаются с помощью NestLoudsTrie (многослойное вложенное сжатое дерево LOUDS). * Значения в SST сжимаются вместе с лучшим коэффициентом сжатия, чем zstd, и могут распаковываться по одному значению со скоростью 1 ГБ/с. * BlockCache больше не нужен, двойное кэширование (BlockCache и PageCache) исключено Другие горячие точки также улучшены:
* Сброс MemTable в L0 исключен, что значительно снижает объем записи и очень удобно для больших (ГБ) MemTable
* MemTable служит индексом ключа для «позиции значения в журнале WAL» * Поскольку содержимое файла WAL почти всегда находится в кэше страниц, к содержимому значения можно эффективно получить доступ с помощью mmap * Когда происходит очистка, MemTable выводится как SST, а WAL обрабатывается как файл BLOB-объектов * CSPP MemTable использует целочисленный индекс вместо физических указателей, поэтому формат в памяти точно такой же, как и в файле * Кэш префикса для поиска кандидатов в SST и кэш префикса для сканирования итераторами
* Кэширование префикса ключа фиксированной длины в массив, двоичный поиск в нем как в массиве uint * Распределенное уплотнение (превосходная замена удаленному уплотнению RocksDB)
* Изящная поддержка MergeOperator, CompactionFilter, PropertiesCollector… * Значительно сокращены усилия по разработке сразу после установки * Очень простое совместное использование сервиса уплотнения на отдельных экземплярах для многих узлов БД Полезная бонусная функция:
* Конфигурация через json/yaml: можно настроить почти все функции
* Опционально встроенный WebView: отображение структур базы данных в веб-браузере, обновление страниц, как анимация
* Онлайн-обновление конфигураций БД по http
Интеграция с MySQL. ToplingDB интегрирована в MySQL от MyTopling, которая является ответвлением MyRocks и имеет значительные улучшения, такие как улучшения ToplingDB в RocksDB:
* WBWI(WriteBatchWithIndex): как и MemTable, SkipList заменен на CSPP, в 20 раз быстрее (ускорение больше, чем у MemTable).
* LockManager и LockTracker: в 10 раз быстрее
* Кодирование и декодирование: в 5 раз быстрее
* Другие ….
MyRocks имеет множество недостатков по сравнению с InnoDB, в то время как MyTopling превосходит InnoDB практически по всем параметрам, за исключением различий в функциях.
Мы создали ~100 PR для RocksDB, из которых были приняты ~40. Наши PR в основном представляют собой «небольшие» изменения, поскольку большие изменения вряд ли будут приняты.
ToplingDB был развернут во многих производственных средах.
Приветствую всех, кто использует ToplingDB и MyTopling, и обсуждайте на https://github.com/topling/toplingdb/discussions
Я не понимаю, что делает это облако родным?
Source: news.ycombinator.com