3.1.1. Описание базового примера¶
Рассматриваемый далее пример использует простую модель данных библиотеки. Имеются объекты следующих типов:
Пользователь (
User
) со следующими полями:id;
username;
Книга (
Book
) со следующими полями:id;
book_name;
author;
Подписка/Абонемент (
Subscription
) со следующими полями:id;
user_id;
book_id;
Все объекты в примере имеют логический тип Агрегат («Aggregate» — см. подробнее). При этом объекты Пользователь и Книга связаны с объектом Подписка (в объекте Подписка хранится информация о том, какие книги есть у каких пользователей).
На языке доменной модели (используемом в TDG) описание этой структуры выглядит следующим образом:
[
{
"name": "User",
"type": "record",
"logicalType": "Aggregate",
"doc": "читатель",
"fields": [
{"name": "id", "type": "long"},
{"name": "username", "type": "string"}
],
"indexes": ["id"],
"relations": [
{ "name": "subscription", "to": "Subscription", "count": "many", "from_fields": "id", "to_fields": "user_id" }
]
},
{
"name": "Book",
"type": "record",
"logicalType": "Aggregate",
"doc": "книга",
"fields": [
{"name": "id", "type": "long"},
{"name": "book_name", "type": "string"},
{"name": "author", "type": "string"}
],
"indexes": ["id"],
"relations": [
{ "name": "subscription", "to": "Subscription", "count": "many", "from_fields": "id", "to_fields": "book_id" }
]
},
{
"name": "Subscription",
"type": "record",
"logicalType": "Aggregate",
"doc": "абонемент",
"fields": [
{"name": "id", "type": "long"},
{"name": "user_id", "type": "long"},
{"name": "book_id", "type": "long"}
],
"indexes": [
{"name":"pkey", "parts": ["id", "user_id"]},
"user_id",
"book_id"
],
"affinity": "user_id",
"relations": [
{ "name": "user", "to": "User", "count": "one", "from_fields": "user_id", "to_fields": "id" },
{ "name": "book", "to": "Book", "count": "one", "from_fields": "book_id", "to_fields": "id" }
]
}
]
Примечание
Параметр affinity
не используется в данном разделе по назначению и достался
базовому примеру из пятого упражнения по работе с TDG (https://github.com/tarantool/examples/tree/master/tdg/5
).
Подробнее про параметр affinity
читайте в документации.
3.1.1.1. Подготовка TDG¶
Для работы с примерами запросов вам потребуется рабочий кластер TDG с загруженной конфигурацией системы и моделью данных.
Выполните установку и настройку кластера TDG в соответствии с инструкциями Установка и запуск и Настройка кластера.
Скачайте архив, который содержит модель данных и конфигурацию системы, по следующей ссылке:
https://github.com/tarantool/examples/releases/download/untagged-91dd480c7608ccbcd1c0/TDG_config_example_5.zip
. Загрузите архив в TDG согласно инструкции.
В результате у вас должен получиться кластер TDG с полноценным набором ролей: connector, input_processor, storage, account_manager, logger и другие. При этом вышеуказанный архив с конфигурацией содержит рассмотренную ранее модель данных, включающую три агрегата User, Book и Subscription со связями между ними. Кроме модели данных в архиве содержится файл конфигурации системы и файлы с исходными кодами функций обработки данных.