3.1.1. Описание базового примера | Tdg

Версия:

1.6 / 1.7
3. Запросы из внешних систем 3.1. Запросы к данным 3.1.1. Описание базового примера

3.1.1. Описание базового примера

Рассматриваемый далее пример использует простую модель данных библиотеки. Имеются объекты следующих типов:

  • Пользователь (User) со следующими полями:

    • id;

    • username;

  • Книга (Book) со следующими полями:

    • id;

    • book_name;

    • author;

  • Подписка/Абонемент (Subscription) со следующими полями:

    • id;

    • user_id;

    • book_id;

Все объекты в примере имеют логический тип Агрегат («Aggregate» — см. подробнее). При этом объекты Пользователь и Книга связаны с объектом Подписка (в объекте Подписка хранится информация о том, какие книги есть у каких пользователей).

../../../_images/prepare.svg

На языке доменной модели (используемом в 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 с загруженной конфигурацией системы и моделью данных.

  1. Выполните установку и настройку кластера TDG в соответствии с инструкциями Установка и запуск и Настройка кластера.

  2. Скачайте архив, который содержит модель данных и конфигурацию системы, по следующей ссылке: 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 со связями между ними. Кроме модели данных в архиве содержится файл конфигурации системы и файлы с исходными кодами функций обработки данных.

Нашли ответ на свой вопрос?
Обратная связь