SwayDB

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:52, 17 января 2019.
SwayDB
SwayDB.png
Разработчики: swaydb.io
Выпущена: 2018; 2 years ago (2018)
Постоянный выпуск: v0.4 / 1 October 2018 года; 16 months ago (2018-10-01)
Состояние разработки: Активное
Написана на: Scala
Операционная система: Кросс-платформенное
Лицензия: Бесплатная
Веб-сайт SwayDB

SwayDB - это типобезопасное, встраиваемое, неблокирующее хранилище данных типа ключ-значение для одного или нескольких дисков, поддерживающее технологию in-memory.

Описание

SwayDB - это реализация LSM-дерева, написанного на Scala, с асинхронным Leveled Compaction на основе стратегии push-pull, построенной на модели Actor. Поддерживает конфигурируемый граф, такой как формат файла с группировкой, для более быстрого чтения и имеет поддержку сжатия для баз данных Memory & Persistent. Потоки никогда не блокируются. Считывание и запись происходят независимо друг от друга. ACID как транзакции могут быть реализована как атомные операции с использованием Batch API.[Источник 1]

С версии 0.2 появилась обратная совместимость для поддержки любых будущих обновлений формата файлов SwayDB.

Особенности

Отличительными особенностями SwayDB являются:

  • Технология in-memory;
  • ACID как атомная запись с Batch API;
  • API, аналогичные коллекциям Scala;
  • Технология TTL (Автоматическое истечение ключа);
  • Обновление значений с использованием функций;
  • Форматы хранения данных
    • Ключ-значение (Map[K, V])
    • Строка (Set[T])
  • Встроенный пользовательский API сериализации с Slice;
  • Конфигурируемый cacheSize;
  • Параллельное уплотнение уровня;
  • Дублированные значения могут быть обнаружены и записаны единожды только с конфигурацией compressDuplicateValues;
  • Сжатие с LZ4 & Snappy полностью поддерживается для баз данных Persistent & Memory для каждого уровня;
  • Отказоустойчивость.[Источник 2]

Типобезопасность

API разработаны и основаны на функциях Scala - mutable.SortedMap[K, V] и mutable.SortedSet[T]. Поддерживаются все API-интерфейсы из Scala, такие как foreach,map, flatMap, filter, foldLeft, foldRight, reduce, reduceRight, включая foreachRight & mapRight.

Производительность

Изначально производительность достигала более 300 000 операций чтения/записи в секунду для постоянных баз данных и до более 600 000 операций чтения/записи в секунду для баз данных в памяти.

C версии 0.2 появилась поддержка API-интерфейсов Range. API-интерфейсы Range невероятно быстры и имеют очень низкие требования к оперативной памяти и хранилищу. Гигабайты данных/миллионы записей могут быть обновлены и удалены менее чем за миллисекундное время отклика с использованием API-интерфейсов Range.

После версии 0.2.1 тест показал увеличение общей производительности на 17%, что привело к увеличению числа операций чтения/записи до 350 000 в секунду.[Источник 3]

В версии 0.4 появилась функция cacheFunctions. Вместо выполнения read-modify-write используется cacheFunctions и в базу данных отправляются типобезопасные функции. Это значительно снизило требования к чтению, записи и пространству. Также данное введение позволяет использовать внешние библиотеки в БД для изменения данных вместо того, чтобы требовать пользовательский язык запросов.[Источник 4]

Механизм back-pressure

Back-pressure — явление, которое можно встретить в порождающем потоке, где некоторые асинхронные операции не могут обрабатывать значения достаточно быстро и нуждаются в замедлении работы производителя. Каждый запрос на запись возвращает состояние Level0 (Level0Meter), которое может использоваться для реализации асинхронного резервного back-pressure с внешними потоковыми библиотеками. Для быстрого запуска предусмотрена блокировка данного механизма - Accelerator.brake().

TTL APIs

Time to live (TTL) — предельный период времени или число итераций или переходов, за который набор данных может существовать до своего исчезновения. Версия 0.3, добавила в SwayDB TTL APIs с точностью до наносекунд. Значения ключа асинхронно удаляются из базы данных по истечении срока действия, мгновенно освобождая пространство на диске/оперативной памяти. Введенный API позволил автоматически удалять значения ключей из базы данных, предоставляя время удаления.[Источник 5]

Сравнение с OrientDB

Ниже приведена таблица сравнения OrientDB и SwayDB, так как OrientDB является одной из лучших БД типа ключ-значение.[Источник 6]

Название SwayDB OrientDB
Описание Встраиваемое, неблокирующее, типобезопасное храненилище данных типа ключ-значение для одного или нескольких дисков, поддерживающее технологию in-memory Мультимодальная СУБД, поддерживающая типы: документ, график, ключ-значение
Модель основной базы данных Хранилище ключ-значение Хранилище ключ-значение, хранилище документов, графическая СУБД
Язык реализации Scala Java
Поддержка XML нет нет
Вторичная индексация нет да
SQL нет SQL-подобный язык запросов, без соединений
API и другие методы доступа Java API, RESTful HTTP/JSON API
Поддерживаемые языки программирования Scala C#, C++, Clojure, Java, JavaScript, PHP, Ruby, Python, Scala
MapReduce нет нет
Концепция транзакций Атомное выполнение операций ACID
Параллелизм да да
Надежность да да
Концепция in-memory да

Источники

  1. SwayDB - Introduction//SwayDB - official site. Дата обновления: 05.11.2018. URL: http://www.swaydb.io/ (дата обращения: 07.10.2018)
  2. SwayDB//Scaladex. Дата обновления: 08.10.2018. URL: https://index.scala-lang.org/simerplaha/swaydb/api/0.3?target=_2.12 (дата обращения: 07.10.2018)
  3. SwayDB v0.2 released - A Key-value storage library//Scala USERS. Дата обновления: 26.12.2018. URL: https://users.scala-lang.org/t/swaydb-v0-2-released-a-key-value-storage-library/2598 (дата обращения: 07.10.2018)
  4. SwayDB v0.4 release with compression and cacheFunctions//Scala USERS. Дата обновления: 05.12.2018. URL: https://users.scala-lang.org/t/swaydb-v0-4-release-with-compression-and-cachefunctions/3322 (дата обращения: 07.10.2018)
  5. SwayDB v0.3 released with TTL & update APIs//Scala USERS. Дата обновления: 30.11.2018. URL: https://users.scala-lang.org/t/swaydb-v0-3-released-with-ttl-update-apis/2760 (дата обращения: 07.10.2018)
  6. System Properties Comparison OrientDB vs. SwayDB//DB-Engines. Дата обновления: 05.11.2018. URL: https://db-engines.com/en/system/OrientDB%3BSwayDB (дата обращения: 07.10.2018)