TerminusDB

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 18:14, 19 июня 2020.
TerminusDB
fraimed
Создатели: Gavin Mendel-Gleason, Matthijs van Otterdijk, Robin de Rooij, Anne Ogborn, Dmytri Kleiner, Paulo Moura
Выпущена: в 2019 году
Постоянный выпуск: 2.0.1 / 5 мая 2020
Состояние разработки: Активное
Написана на: Rust, Prolog[Источник 1]
Локализация: Английская
Лицензия: GNU GPLv3
Веб-сайт Официальная страница

TerminusDB - это управляемая моделями графовая база данных, разработанная специально для эпохи Интернета. TerminusDB значительно сокращает время и усилия, необходимые для создания любого приложения, которое совместно использует, управляет или редактирует данные. В результате получаются унифицированные, хорошо структурированные и уточненные данные

История

TerminusDB возникла в Тринити-колледже Дублина в Ирландии в 2015 году, когда началась работа над информационной архитектурой для "Seshat: The Global Historical Databank", амбициозного проекта по хранению большого количества информации о каждом обществе в истории человечества. Была потребность в решении, которое могло бы обеспечить сотрудничество между высоко распределенной командой в общей базе данных, основной функцией которой было бы создание высококачественных наборов данных с очень богатой структурой, хранящих информацию обо всем, начиная от религиозных практик и заканчивая географическими масштабами.

Seshat

Хранение данных в историческом банке данных было очень сложной задачей. Хотя масштаб данных не был особенно большим, сложность была очень высокой. Во-первых, было большое количество различных типов фактов, которые необходимо было хранить. Информация о населении, грузоподъемности, религиозных ритуалах, разновидностях домашнего скота и т.д. В дополнение к этому каждый факт должен был охватываться периодом, в течение которого этот факт, вероятно, был истинным. Необходимо было сохранить информацию о том, какой метод измерения породил этот факт, и кто его предпринял.

Все это возможно реализовать в СУБД, но это была бы трудная задача моделирования. Богатство данных и обширная таксономическая информация делают использование графа знаний более подходящим. Учитывая, что в дублинском Тринити-колледже было несколько специалистов по связанным данным, было принято решение использовать связанный подход к решению этой проблемы.

Первый прототип был просто программой, написанной на языке программирования Prolog, использующей базу данных Prolog и временные предикаты, которые можно было использовать в транзакции таким образом, чтобы запуск обновлений мог иметь ограничения, проверяемые без нарушения представления читателя базы данных.

Изменение концепции

Вскоре после этого поступила просьба попытаться интегрировать в нашу систему большую базу данных коммерческой разведки. Эти данные хранились в базе данных, весящей 10 ГБ и хранящей информацию обо всех компаниях, советах директоров и различных отношениях между компаниями и важными людьми на протяжении всего периода польской экономики с 1990-х гг. Эта проблема дала новые конструктивные ограничения. Нужен был метод хранения графа, который позволил бы быстро находить цепочки (одна из проблем, которую они должны были решить), был бы достаточно мал, чтобы не заканчивалась основная память, и который также позволял бы обрабатывать транзакции. Естественным решением было повторно использовать идею временного слоя транзакций, но держать их дольше - и сделать эти слои очень маленькими и быстрыми для запроса. В итоге выяснилось, что это решение слишком большое и слишком медленное для многопотоковых соединений на примере использования коммерческой разведки. В конце концов выбор остановился на HDT. При оценке это решение, казалось, работало очень хорошо, чтобы представлять данный слой в наших транзакциях, а также работать намного лучше, и поэтому мы построили прототип, используя библиотеку.

Затем выяснилось, что у библиотеки HDT есть ряд проблем. Во-первых, она не была действительно разработана для обеспечения программного доступа, который требовался во время транзакций. Во-вторых, было много проблем с повторным входом. Это была серьезная проблема. Управление всей многослойной информацией в Prolog было явно не идеальным. Нужно было либо исправить HDT, либо расширить его, либо разработать что-то другое. Разработка началась в Rust. Конкретные случаи использования не требовали большого количества кода. Выбор Rust отчасти был вызван необходимостью отслеживанием сегментов в HDT, (написанных на C++).

На тот момент система обработки транзакций имела линейную историю. Возможность древовидных историй, то есть наличия чего-то с ветвлением, теперь была очевидна и относительно проста в реализации. [Источник 2]

Open Source

Как и в случае любого технического продукта такого рода, существует множество различных путей, по которым могла пойти разработка. Теперь TerminusDB имеет открытый исходный код.

Версия 1.0 была выпущена в октябре 2019 года. TerminusDB выпускается под лицензией GPLv3. [Источник 3]

Функциональные возможности

  • Позволяет делать сложные модели данных простыми, поддерживаемыми и применяемыми.
  • Позволяет выполнять поиск повторяющихся шаблонов с помощью рекурсии.
  • Позволяет совместно использовать данные с использованием связанных открытых форматов данных RDF и JSON-LD, упрощающих обмен научной или организационной информацией.
  • Разветвление, клонирование, слияние, сжатие и откат - все это обеспечивается подходом Дельта-кодирования для управления версиями.
  • Позволяет автоматизировать создание пользовательского интерфейса. [Источник 4]

Основные особенности

TerminusDB - это полнофункциональная графическая система управления базами данных с языком запросов. Проект реализован в библиотеке Rust, использует сжатые структуры данных и подход Дельта-кодирования.
Инфраструктура TerminusDB основана на стандарте RDF. Этот стандарт определяет конечные помеченные ориентированные графы. [Источник 5]

TerminusDB может использоваться как модуль Node.js, доступный через реестр npm, или напрямую включаться в веб-сайты.[Источник 6] Он также имеет клиент Python для API-интерфейса TerminusDB RESTful и питонную версию языка запросов веб-объектов, WOQLpy.[Источник 7]

Язык запросов

TerminusDB имеет мощный язык запросов WOQL (Web Object Query Language), который поддерживает JavaScript и Python, а также чистый JSON. Он позволяет TerminusDB обрабатывать базу данных как хранилище документов и предоставляет функции запросов для упрощения обхода зависимостей. Он также позволяет запрашивать информацию непосредственно из удаленных CSV-файлов. [Источник 8]

Пример, демонстрирующий простой запрос.

WOQL.get(
    WOQL.as("Start station","v:Start_Station")
        .as("End station", "v:End_Station")
        .as("Start date", "v:Start_Time")
        .as("End date", "v:End_Time")
        .as("Duration", "v:Duration")
        .as("Start station number", "v:Start_ID")
        .as("End station number", "v:End_ID")
        .as("Bike number", "v:Bike")
        .as("Member type", "v:Member_Type")
).remote("https://terminusdb.com/t/data/bike_tutorial.csv")

Установка

Сервер

Rust

Установка Rust, следуя инструкциям.

Библиотеки

$  sudo pacman -S git swi-prolog make automake autoconf libtool zlib pkgconf gcc 

Библиотеки SWIPL

$ swipl
Welcome to SWI-Prolog (threaded, 64 bits, version 8.1.10-28-g8a26a53c1)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

1 ?- pack_install(terminus_store_prolog).
% Contacting server ....
 

Terminus Server

Клонируем скрипт из GitHub [Источник 9]

$  git clone https://github.com/terminusdb/terminusdb-server 
$  cd terminusdb-server 
$  git submodule init 

Установка пароля администратора, которыц используется как ключ API суперпользователя для доступа. Также настройка имени сервера.

$  utils/db_init -k "my_password_here" -s "my_server_name_here" 

Запуск сервера

$  ./start.pl 

Клиент

Клиент TerminusDB может использоваться как модуль Node.js, доступный через реестр npm, или напрямую включаться в веб-сайты.

Модуль NPM

Перед установкой скачайте и установите Node.js. Требуется Node.js 0,10 или выше.

$  npm install --save @ terminusdb/terminusdb-client 

Загрузка и установка скрипта

Используем cdn

$  <script src="https://unpkg.com/@terminusdb/terminusdb-client/dist/terminusdb-client.min.js"></script> 

Загрузка файл terminusdb-client.min.js из каталога /dist и сохранение его по своему выбору, затем:

$  <script src="http://my.saved.location/terminusdb-client.min.js"></script> 

Пример использования

//
const TerminusClient = require('@terminusdb/terminusdb-client');

//Create a new instance of terminusDB client
const client = new TerminusClient.WOQLClient();

//Connect to a TerminusDB server at the given URI with an API key
client.connect("http://localhost:6363/", 'myKey').
 .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .finally(function () {
    // always executed
  });


//use async/await.
async function getCapabilities() {
  try {
    const response = await client.connect("http://localhost:6363/", 'myKey');
    console.log(response);
  } catch (err) {
    console.error(err);
  }
}

Опции

Для инициализации TerminusDB Сlient с использованием пользовательских опций

const TerminusClient = require('@terminusdb/terminusdb-client')

const client = new TerminusClient.WOQLClient({
    server:"http://localhost/",
    dbid:"test_db",
    include_key:true
});

Тестирование

  1. Скопировать этот репозиторий [Источник 6]
  2. Установить
    $  npm install 
  3. Запустить тест(test)
    $  npm run test 

Источники

  1. TerminusDB : официальный репозиторий // Github. URL: https://github.com/terminusdb (дата обращения: 10.06.2020).
  2. TerminusDB: A Technical History // TerminusDB Blog. 2020. URL: https://terminusdb.com/blog/2020/04/14/terminusdb-a-technical-history/ (дата обращения: 10.06.2020).
  3. Feeney L. TerminusDB — the database for data people // Medium. 2019. URL: https://medium.com/terminusdb/today-we-release-terminusdb-the-database-for-data-people-36cfd3f81d3f (дата обращения: 10.06.2020).
  4. TerminusDB Server : официальный репозиторий // Github. URL: https://github.com/terminusdb/terminusdb-server (дата обращения: 10.06.2020).
  5. Van Otterdijk M. Succinct Data Structures and Delta Encoding for Modern Databases : whitepaper / M. Van Otterdijk, G. Mendel-Gleason, K. Feeney // Github. 2020. URL: https://github.com/terminusdb/terminusdb-server/blob/dev/docs/whitepaper/terminusdb.pdf (дата обращения: 10.06.2020).
  6. 6,0 6,1 TerminusDB Client : официальный репозиторий // Github. 2019. URL: https://github.com/terminusdb/terminusdb-client (дата обращения: 10.06.2020).
  7. TerminusDB Client Python : официальный репозиторий // Github. 2019. URL: https://github.com/terminusdb/terminusdb-client-python (дата обращения: 10.06.2020).
  8. Feeney L. My First TerminusDB Graph Visualisation — Bike Share Data // Medium. 2020. URL: https://medium.com/terminusdb/my-first-terminusdb-graph-visualisation-bike-share-data-39c59a1ab86a (дата обращения: 10.06.2020).
  9. Build From Source : официальный репозиторий // Github. 2020. URL: https://github.com/terminusdb/terminusdb-server/blob/master/docs/BUILD.md (дата обращения: 10.06.2020).