TerarkDB

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:18, 23 января 2019.
Open book.svg Авторство
А. А. Вернидуб
Согласовано: 23.01.2019
TerarkDB
Terark.png
Выпущена: 2008
Написана на: Java
Операционная система: Linux, FreeBSD, Mac OS X
Платформа: x86-64
Локализация: Английский
Тип ПО: NoSQL база данных
Лицензия: BSD лицензия
Веб-сайт terark.com

TerarkDB [Источник 1] - это программное обеспечение с открытым исходным кодом, является основным продуктом Terark. Это дистрибутив RocksDB, основанный на алгоритмах Terark. С этими алгоритмами TerarkDB способен хранить больше данных и получать доступ намного быстрее, чем RocksDB (на 3 + X больше данных и на 10 + X быстрее) на одном и том же аппаратном обеспечении.

Обзор

Китайская компания Terark разработала алгоритмы, которые позволяют базе данных работать в 200 раз быстрее путем сжатия данных и их чтением без декомпрессии.
Обычные базы данных хранят свои данные в блоках с соответствующим индексом. Когда данные необходимо получить, выполняется поиск индекса и находится соответствующий блок. Этот блок сжат и необходимо произвести его декомпрессию. Блоки управляются кэшем файловой системы и должны быть сброшены в кэш-блок, а затем распакованы и прочитаны. Эта операция сильно увеличивает нагрузку на сервер. [Источник 2]
TerarkDB также сжимает данные, но его подход к индексированию немного иной. Индексы содержат гораздо больше информации о тех данных, которые в нем находятся, поэтому блоки не нужно извлекать и производить декомпрессию, данные можно прочитать на месте. Для этого используется структура данных Nested Succinct Trie. Сжатие данных, в свою очередь, обеспечивается разработанной Terark технологией PA-Zip (Point Accessible Zip).

TerarkDB - cостоит из двух основных модулей terark rocksdb и terark-zip-rocksdb. [Источник 3]
Причем:

  • terark rocksdb является открытым исходным кодом и может быть скомпилирован самостоятельно
  • terark-zip-rocksdb является открытым исходным кодом, но его нельзя компилировать самостоятельно

terark-zip-rocksdb - это SSTable из RocksDB с добавленными алгоритмами сжатия. Без этого модуля TerarkDB работает так же, как и RocksDB.

Развертывание TerarkDB

1. Необходимо скачать первый предкомпилированный модуль terark-zip-rocksdb
2. Устанавливаем второй модуль

  git clone https://github.com/terark/terarkdb.git
  cd  terarkdb
  git submodule init
  git submodule update
  make -C rocksdb shared_lib DEBUG_LEVEL=0 

3. Для разрешения работы алгоритмов Terark необходимо задать переменные среды:

export LD_LIBRARY_PATH=terark-zip-rocksdb-XXX/lib:$LD_LIBRARY_PATH

env LD_PRELOAD=libterark-zip-rocksdb-r.so \
    TerarkZipTable_localTempDir=/path/to/some/temp/dir \
    TerarkZipTable_indexNestLevel=2 \
    TerarkZipTable_indexCacheRatio=0.005 \
    TerarkZipTable_smallTaskMemory=1G \
    TerarkZipTable_softZipWorkingMemLimit=16G \
    TerarkZipTable_hardZipWorkingMemLimit=32G \
    app_exe_file app_args...

Особенности TerarkDB

Скорость чтения превосходит практически в сотни тысяч раз скорости таких баз данных, как RocksDB и WiredTiger (см.рисунок 1).

Рисунок 1 - Производительность TerarkDB в сравнении с RocksDB и WiredTiger

  • Значительно более высокая степень сжатия (файл диска намного меньше)

TerarkDB умеет сжимать данные практически в 5 раз сильнее, чем его конкуренты (см. рисунок 2).

Рисунок 2 - Степень сжатия TerarkDB в сравнении с RocksDB и WiredTiger (чем меньше,тем лучше)

  • Высокая производительность

Сравнение TerarkDB с другими базами данных по производительности представлено на рисунке 3.

Рисунок 3 - Производительность TerarkDB в сравнении с RocksDB и WiredTiger

  • Значительно меньшее использование памяти (map на сжатом файле, без двойного кэширования)

Сравнение TerarkDB c другими базами данных

В таблице 1 представлено сравнение TerarkDB с такими известными БД, как RocksDB, MongoDB, ElasticSearch [Источник 5]

Название БД TerarkDB RocksDB MongoDB ElasticSearch
Краткое описание Хранилище "ключ-значение", дистрибутив RocksDB с расширенными алгоритмами сжатия. Постоянное хранилище "ключ-значение" для быстрых накопителей. Документоориентированная система управления базами данных Распределенный, RESTful современный поисковый и аналитический движок на основе Apache License
Модель базы данных Хранилище "ключ-значение" Хранилище "ключ-значение" Документоориентированная БД Поисковой движок
Написана на C++ C++ C++ Java
Лицензия не Open Source ( версия Open Source только с ограниченным функционалом) Open Source Open Source Open Source
Год выпуска 2016 2013 2009 2009
Тип поддерживаемой ОС - - Linux

OS X
Solaris
Windows

Все ОС
Наличие вторичных индексов Нет Нет Нет Да
API C++ API

Java API

C++ API

Java API

Проприетарный потокол Java API

RESTful HTTP/JSON API

SQL Нет Нет Нет SQL-ориентированный язык
Поддерживаемые языки программирования C++

Java

C++

Java

C

C#
C++
Erlang
Haskell
Java
JavaScript
Perl
PHP
Python
Ruby
Scala

.Net

Groovy
Java
JavaScript
Perl
PHP
Python
Ruby

MapReduce Нет Нет Да ES-Hadoop Connector
Параллелизм Да Да Да Да
Резидентная база данных Да Да Да Нет

Источники

  1. TerarkDB [Электронный ресурс]. Официальный сайт / Дата обращения: 07.12.2018. Режим доступа: http://www.terark.com/
  2. TechNode [Электронный ресурс]. A Chinese company is making the cloud 200x faster / Дата обращения: 07.12.2018. Режим доступа: https://technode.com/2017/07/03/how-chinese-company-terark-can-make-your-database-200x-faster
  3. GitHub [Электронный ресурс]. TerarkDB Documentation / Дата обращения: 07.12.2018. Режим доступа: https://github.com/Terark/terarkdb/wiki
  4. TerarkDB Documentation[Электронный ресурс]. TerarkDB vs. RocksDB vs. WiredTiger / Дата обращения: 07.12.2018. Режим доступа: https://terark.com/en/engines/terark-db
  5. DB-engines [Электронный ресурс]. System Properties Comparison Elasticsearch vs. RocksDB vs. TerarkDB / Дата обращения: 07.12.2018. Режим доступа: https://db-engines.com/en/system/Elasticsearch%3BRocksDB%3BTerarkDB