mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
530 lines
34 KiB
Markdown
530 lines
34 KiB
Markdown
---
|
||
layout: default
|
||
title: "Техническая спецификация запросов GraphQL"
|
||
parent: "Russian (Beta)"
|
||
---
|
||
|
||
# Техническая спецификация запросов GraphQL
|
||
|
||
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
|
||
|
||
## Обзор
|
||
|
||
Эта спецификация описывает реализацию интерфейса запросов GraphQL для хранения структурированных данных TrustGraph в Apache Cassandra. Основываясь на возможностях структурированных данных, описанных в спецификации structured-data.md, этот документ подробно описывает, как запросы GraphQL будут выполняться к таблицам Cassandra, содержащим извлеченные и импортированные структурированные объекты.
|
||
|
||
Сервис запросов GraphQL предоставит гибкий и типобезопасный интерфейс для запроса структурированных данных, хранящихся в Cassandra. Он будет динамически адаптироваться к изменениям схемы, поддерживать сложные запросы, включая отношения между объектами, и беспрепятственно интегрироваться с существующей архитектурой TrustGraph, основанной на обмене сообщениями.
|
||
|
||
## Цели
|
||
|
||
**Динамическая поддержка схемы**: Автоматическая адаптация к изменениям схемы в конфигурации без перезапуска сервиса.
|
||
**Соответствие стандартам GraphQL**: Предоставление стандартного интерфейса GraphQL, совместимого с существующими инструментами и клиентами GraphQL.
|
||
<<<<<<< HEAD
|
||
**Эффективные запросы к Cassandra**: Преобразование запросов GraphQL в эффективные запросы CQL к Cassandra, учитывающие первичные ключи и индексы.
|
||
**Разрешение отношений**: Поддержка решателей полей GraphQL для отношений между различными типами объектов.
|
||
**Типобезопасность**: Обеспечение типобезопасного выполнения запросов и генерации ответов на основе определений схемы.
|
||
**Масштабируемая производительность**: Эффективная обработка одновременных запросов с использованием правильного пула соединений и оптимизации запросов.
|
||
**Интеграция запросов/ответов**: Поддержка существующей архитектуры TrustGraph, основанной на шаблоне запросов/ответов с использованием Pulsar.
|
||
=======
|
||
**Эффективные запросы к Cassandra**: Преобразование запросов GraphQL в эффективные запросы CQL для Cassandra, учитывающие первичные ключи и индексы.
|
||
**Разрешение отношений**: Поддержка решателей полей GraphQL для отношений между различными типами объектов.
|
||
**Типобезопасность**: Обеспечение типобезопасного выполнения запросов и генерации ответов на основе определений схемы.
|
||
**Масштабируемая производительность**: Эффективная обработка одновременных запросов с использованием правильного пула соединений и оптимизации запросов.
|
||
**Интеграция запросов/ответов**: Поддержка существующего шаблона запросов/ответов TrustGraph, основанного на Pulsar.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
**Обработка ошибок**: Предоставление подробной отчетности об ошибках для несоответствий схемы, ошибок запросов и проблем проверки данных.
|
||
|
||
## Предыстория
|
||
|
||
<<<<<<< HEAD
|
||
Реализация хранения структурированных данных (trustgraph-flow/trustgraph/storage/objects/cassandra/) записывает объекты в таблицы Cassandra на основе определений схемы, хранящихся в системе конфигурации TrustGraph. Эти таблицы используют структуру составного первичного ключа с коллекциями и первичными ключами, определенными схемой, что обеспечивает эффективные запросы внутри коллекций.
|
||
=======
|
||
Реализация хранения структурированных данных (trustgraph-flow/trustgraph/storage/objects/cassandra/) записывает объекты в таблицы Cassandra на основе определений схемы, хранящихся в системе конфигурации TrustGraph. Эти таблицы используют структуру составного первичного ключа с коллекциями и первичными ключами, определенными схемой, что обеспечивает эффективные запросы в пределах коллекций.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
Текущие ограничения, которые эта спецификация решает:
|
||
Отсутствие интерфейса запросов для структурированных данных, хранящихся в Cassandra.
|
||
Невозможность использования мощных возможностей запросов GraphQL для структурированных данных.
|
||
Отсутствие поддержки обхода отношений между связанными объектами.
|
||
Отсутствие стандартизированного языка запросов для доступа к структурированным данным.
|
||
|
||
Сервис запросов GraphQL устранит эти недостатки, предоставив:
|
||
Стандартный интерфейс GraphQL для запросов к таблицам Cassandra.
|
||
Динамическую генерацию схем GraphQL из конфигурации TrustGraph.
|
||
Эффективное преобразование запросов GraphQL в CQL для Cassandra.
|
||
Поддержку разрешения отношений с помощью решателей полей.
|
||
|
||
## Технический дизайн
|
||
|
||
### Архитектура
|
||
|
||
Сервис запросов GraphQL будет реализован как новый обработчик потоков TrustGraph, следуя установленным шаблонам:
|
||
|
||
<<<<<<< HEAD
|
||
**Местоположение модуля**: `trustgraph-flow/trustgraph/query/objects/cassandra/`
|
||
=======
|
||
**Расположение модуля**: `trustgraph-flow/trustgraph/query/objects/cassandra/`
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
**Основные компоненты**:
|
||
|
||
1. **Обработчик сервиса запросов GraphQL**
|
||
Расширяет базовый класс FlowProcessor.
|
||
Реализует шаблон запросов/ответов, аналогичный существующим сервисам запросов.
|
||
Отслеживает конфигурацию на предмет обновлений схемы.
|
||
Поддерживает синхронизацию схемы GraphQL с конфигурацией.
|
||
|
||
2. **Генератор динамической схемы**
|
||
<<<<<<< HEAD
|
||
Преобразует определения RowSchema TrustGraph в типы GraphQL.
|
||
Создает типы объектов GraphQL с соответствующими определениями полей.
|
||
Генерирует корневой тип запроса с решателями на основе коллекций.
|
||
Обновляет схему GraphQL при изменении конфигурации.
|
||
|
||
3. **Исполнитель запросов**
|
||
Анализирует входящие запросы GraphQL с использованием библиотеки Strawberry.
|
||
=======
|
||
Преобразует определения схемы TrustGraph в типы GraphQL.
|
||
Создает типы объектов GraphQL с правильными определениями полей.
|
||
Генерирует корневой тип Query с решателями на основе коллекций.
|
||
Обновляет схему GraphQL при изменении конфигурации.
|
||
|
||
3. **Исполнитель запросов**
|
||
Разбирает входящие запросы GraphQL с использованием библиотеки Strawberry.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Проверяет запросы на соответствие текущей схеме.
|
||
Выполняет запросы и возвращает структурированные ответы.
|
||
Обрабатывает ошибки с подробными сообщениями об ошибках.
|
||
|
||
4. **Транслятор запросов Cassandra**
|
||
Преобразует выборки GraphQL в запросы CQL.
|
||
Оптимизирует запросы на основе доступных индексов и первичных ключей.
|
||
Обрабатывает фильтрацию, пагинацию и сортировку.
|
||
Управляет пулом соединений и жизненным циклом сессии.
|
||
|
||
5. **Разрешитель отношений**
|
||
Реализует решатели полей для отношений между объектами.
|
||
Выполняет эффективную пакетную загрузку для предотвращения запросов N+1.
|
||
Кэширует разрешенные отношения в контексте запроса.
|
||
Поддерживает как прямой, так и обратный обход отношений.
|
||
|
||
### Мониторинг схемы конфигурации
|
||
|
||
Сервис зарегистрирует обработчик конфигурации для получения обновлений схемы:
|
||
|
||
```python
|
||
self.register_config_handler(self.on_schema_config)
|
||
```
|
||
|
||
Когда схемы меняются:
|
||
1. Разбор новых определений схемы из конфигурации
|
||
2. Регенерация типов GraphQL и решателей
|
||
3. Обновление исполняемой схемы
|
||
4. Очистка любых кэшей, зависящих от схемы
|
||
|
||
### Генерация схемы GraphQL
|
||
|
||
Для каждой RowSchema в конфигурации, генерируется:
|
||
|
||
1. **Тип объекта GraphQL**:
|
||
Отображение типов полей (string → String, integer → Int, float → Float, boolean → Boolean)
|
||
Отметка обязательных полей как non-nullable в GraphQL
|
||
Добавление описаний полей из схемы
|
||
|
||
2. **Корневые поля запроса**:
|
||
Запрос коллекции (например, `customers`, `transactions`)
|
||
Аргументы фильтрации на основе индексированных полей
|
||
Поддержка пагинации (limit, offset)
|
||
Варианты сортировки для полей, поддерживающих сортировку
|
||
|
||
3. **Поля отношений**:
|
||
Определение отношений внешнего ключа из схемы
|
||
Создание решателей полей для связанных объектов
|
||
Поддержка как одиночных объектов, так и списков отношений
|
||
|
||
### Поток выполнения запроса
|
||
|
||
1. **Прием запроса**:
|
||
Получение ObjectsQueryRequest от Pulsar
|
||
Извлечение строки запроса GraphQL и переменных
|
||
Определение контекста пользователя и коллекции
|
||
|
||
2. **Валидация запроса**:
|
||
Разбор запроса GraphQL с использованием Strawberry
|
||
Проверка на соответствие текущей схеме
|
||
Проверка выбранных полей и типов аргументов
|
||
|
||
3. **Генерация CQL**:
|
||
Анализ выбранных элементов GraphQL
|
||
<<<<<<< HEAD
|
||
Создание запроса CQL с правильными предложениями WHERE
|
||
=======
|
||
Построение запроса CQL с правильными предложениями WHERE
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Включение коллекции в ключ партиции
|
||
Применение фильтров на основе аргументов GraphQL
|
||
|
||
4. **Выполнение запроса**:
|
||
Выполнение запроса CQL к Cassandra
|
||
Отображение результатов в структуру ответа GraphQL
|
||
Разрешение любых полей отношений
|
||
Форматирование ответа в соответствии со спецификацией GraphQL
|
||
|
||
5. **Доставка ответа**:
|
||
Создание ObjectsQueryResponse с результатами
|
||
Включение любых ошибок выполнения
|
||
Отправка ответа через Pulsar с идентификатором корреляции
|
||
|
||
### Модели данных
|
||
|
||
> **Примечание**: Существует существующая схема StructuredQueryRequest/Response в `trustgraph-base/trustgraph/schema/services/structured_query.py`. Однако, в ней отсутствуют критические поля (user, collection) и используются неоптимальные типы. Схемы ниже представляют собой рекомендуемую эволюцию, которая должна либо заменить существующие схемы, либо быть создана как новые типы ObjectsQueryRequest/Response.
|
||
|
||
#### Схема запроса (ObjectsQueryRequest)
|
||
|
||
```python
|
||
from pulsar.schema import Record, String, Map, Array
|
||
|
||
class ObjectsQueryRequest(Record):
|
||
user = String() # Cassandra keyspace (follows pattern from TriplesQueryRequest)
|
||
collection = String() # Data collection identifier (required for partition key)
|
||
query = String() # GraphQL query string
|
||
variables = Map(String()) # GraphQL variables (consider enhancing to support all JSON types)
|
||
operation_name = String() # Operation to execute for multi-operation documents
|
||
```
|
||
|
||
**Обоснование изменений по сравнению с существующим запросом StructuredQueryRequest:**
|
||
Добавлены поля `user` и `collection` для соответствия шаблону других сервисов запросов.
|
||
Эти поля необходимы для идентификации пространства ключей и коллекции Cassandra.
|
||
Переменные пока остаются Map(String()), но в идеале должны поддерживать все типы JSON.
|
||
|
||
#### Схема ответа (ObjectsQueryResponse)
|
||
|
||
```python
|
||
from pulsar.schema import Record, String, Array
|
||
from ..core.primitives import Error
|
||
|
||
class GraphQLError(Record):
|
||
message = String()
|
||
path = Array(String()) # Path to the field that caused the error
|
||
extensions = Map(String()) # Additional error metadata
|
||
|
||
class ObjectsQueryResponse(Record):
|
||
error = Error() # System-level error (connection, timeout, etc.)
|
||
data = String() # JSON-encoded GraphQL response data
|
||
errors = Array(GraphQLError) # GraphQL field-level errors
|
||
extensions = Map(String()) # Query metadata (execution time, etc.)
|
||
```
|
||
|
||
**Обоснование изменений по сравнению с существующим StructuredQueryResponse:**
|
||
Различает системные ошибки (`error`) и ошибки GraphQL (`errors`)
|
||
Использует структурированные объекты GraphQLError вместо массива строк
|
||
Добавляет поле `extensions` для соответствия спецификации GraphQL
|
||
Сохраняет данные в виде строки JSON для совместимости, хотя нативные типы были бы предпочтительнее
|
||
|
||
### Оптимизация запросов Cassandra
|
||
|
||
Сервис будет оптимизировать запросы Cassandra следующим образом:
|
||
|
||
1. **Соблюдение ключей разделов (Partition Keys):**
|
||
Всегда включайте коллекцию в запросы
|
||
Эффективно используйте первичные ключи, определенные в схеме
|
||
Избегайте полного сканирования таблицы
|
||
|
||
2. **Использование индексов:**
|
||
Используйте вторичные индексы для фильтрации
|
||
Объединяйте несколько фильтров, когда это возможно
|
||
Предупреждайте, когда запросы могут быть неэффективными
|
||
|
||
3. **Пакетная загрузка:**
|
||
Собирайте запросы для получения взаимосвязей
|
||
Выполняйте их пакетами для уменьшения количества обращений
|
||
Кэшируйте результаты в контексте запроса
|
||
|
||
4. **Управление соединениями:**
|
||
Поддерживайте постоянные сессии Cassandra
|
||
Используйте пули соединений
|
||
Обрабатывайте повторное подключение в случае сбоев
|
||
|
||
### Примеры запросов GraphQL
|
||
|
||
#### Простой запрос коллекции
|
||
```graphql
|
||
{
|
||
customers(status: "active") {
|
||
customer_id
|
||
name
|
||
email
|
||
registration_date
|
||
}
|
||
}
|
||
```
|
||
|
||
#### Запрос со связями
|
||
```graphql
|
||
{
|
||
orders(order_date_gt: "2024-01-01") {
|
||
order_id
|
||
total_amount
|
||
customer {
|
||
name
|
||
email
|
||
}
|
||
items {
|
||
product_name
|
||
quantity
|
||
price
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
#### Разделенная на страницы выборка
|
||
```graphql
|
||
{
|
||
products(limit: 20, offset: 40) {
|
||
product_id
|
||
name
|
||
price
|
||
category
|
||
}
|
||
}
|
||
```
|
||
|
||
<<<<<<< HEAD
|
||
### Зависимости реализации
|
||
=======
|
||
### Реализация и зависимости
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
**Strawberry GraphQL**: Для определения схемы GraphQL и выполнения запросов.
|
||
**Cassandra Driver**: Для подключения к базе данных (уже используется в модуле хранения).
|
||
**TrustGraph Base**: Для FlowProcessor и определений схем.
|
||
**Configuration System**: Для мониторинга и обновления схем.
|
||
|
||
### Интерфейс командной строки
|
||
|
||
Сервис предоставит команду интерфейса командной строки: `kg-query-objects-graphql-cassandra`
|
||
|
||
Аргументы:
|
||
<<<<<<< HEAD
|
||
`--cassandra-host`: Точка контакта кластера Cassandra.
|
||
=======
|
||
`--cassandra-host`: Контактная точка кластера Cassandra.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
`--cassandra-username`: Имя пользователя для аутентификации.
|
||
`--cassandra-password`: Пароль для аутентификации.
|
||
`--config-type`: Тип конфигурации для схем (по умолчанию: "schema").
|
||
Стандартные аргументы FlowProcessor (конфигурация Pulsar и т.д.).
|
||
|
||
<<<<<<< HEAD
|
||
## Интеграция API
|
||
=======
|
||
## Интеграция с API
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
### Темы Pulsar
|
||
|
||
**Входная тема**: `objects-graphql-query-request`
|
||
Схема: ObjectsQueryRequest
|
||
<<<<<<< HEAD
|
||
Получает GraphQL-запросы от шлюзовых сервисов.
|
||
=======
|
||
Получает запросы GraphQL от шлюзовых сервисов.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
**Выходная тема**: `objects-graphql-query-response`
|
||
Схема: ObjectsQueryResponse
|
||
Возвращает результаты запросов и ошибки.
|
||
|
||
<<<<<<< HEAD
|
||
### Интеграция с шлюзом
|
||
|
||
Шлюз и обратный шлюз потребуют конечных точек для:
|
||
1. Приема GraphQL-запросов от клиентов.
|
||
2. Передачи запросов сервису запросов через Pulsar.
|
||
3. Возврата ответов клиентам.
|
||
4. Поддержки GraphQL-запросов на интроспекцию.
|
||
=======
|
||
### Интеграция со шлюзом
|
||
|
||
Шлюз и обратный шлюз потребуют конечных точек для:
|
||
1. Приема запросов GraphQL от клиентов.
|
||
2. Передачи запросов сервису запросов через Pulsar.
|
||
3. Возврата ответов клиентам.
|
||
4. Поддержки запросов introspection GraphQL.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
### Интеграция с инструментом агента
|
||
|
||
Новый класс инструмента агента позволит:
|
||
<<<<<<< HEAD
|
||
Генерировать GraphQL-запросы из естественного языка.
|
||
Выполнять GraphQL-запросы напрямую.
|
||
Интерпретировать и форматировать результаты.
|
||
Интегрироваться с потоками принятия решений агентом.
|
||
|
||
## Вопросы безопасности
|
||
|
||
**Ограничение глубины запросов**: Предотвращает вложенные запросы, которые могут вызвать проблемы с производительностью.
|
||
**Анализ сложности запросов**: Ограничивает сложность запросов для предотвращения исчерпания ресурсов.
|
||
**Разрешения на уровне полей**: Будущая поддержка контроля доступа на уровне полей на основе ролей пользователей.
|
||
**Санитизация входных данных**: Проверяет и очищает все входные данные запросов для предотвращения атак внедрения.
|
||
**Ограничение скорости**: Реализует ограничение скорости запросов на пользователя/коллекцию.
|
||
|
||
## Вопросы производительности
|
||
|
||
**Планирование запросов**: Анализирует запросы перед выполнением для оптимизации генерации CQL.
|
||
=======
|
||
Преобразование естественного языка в запросы GraphQL.
|
||
Непосредственное выполнение запросов GraphQL.
|
||
Интерпретацию и форматирование результатов.
|
||
Интеграцию с потоками принятия решений агентом.
|
||
|
||
## Вопросы безопасности
|
||
|
||
**Ограничение глубины запросов**: Предотвращение глубоко вложенных запросов, которые могут вызвать проблемы с производительностью.
|
||
**Анализ сложности запросов**: Ограничение сложности запросов для предотвращения исчерпания ресурсов.
|
||
**Разрешения на уровне полей**: Будущая поддержка контроля доступа на уровне полей на основе ролей пользователей.
|
||
**Санитарная обработка входных данных**: Проверка и санитарная обработка всех входных данных запросов для предотвращения атак внедрения.
|
||
**Ограничение скорости**: Реализация ограничения скорости запросов на пользователя/коллекцию.
|
||
|
||
## Вопросы производительности
|
||
|
||
**Планирование запросов**: Анализ запросов перед выполнением для оптимизации генерации CQL.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
**Кэширование результатов**: Рассмотрите возможность кэширования часто используемых данных на уровне решателя полей.
|
||
**Пул соединений**: Поддерживайте эффективные пулы соединений к Cassandra.
|
||
**Пакетные операции**: Объединяйте несколько запросов, когда это возможно, для уменьшения задержки.
|
||
**Мониторинг**: Отслеживайте метрики производительности запросов для оптимизации.
|
||
|
||
## Стратегия тестирования
|
||
|
||
<<<<<<< HEAD
|
||
### Unit Tests
|
||
Генерация схемы на основе определений RowSchema
|
||
Разбор и проверка запросов GraphQL
|
||
Логика генерации запросов CQL
|
||
Реализации решателей полей
|
||
|
||
### Contract Tests
|
||
Соответствие контракту сообщений Pulsar
|
||
Достоверность схемы GraphQL
|
||
Проверка формата ответа
|
||
Проверка структуры ошибок
|
||
|
||
### Integration Tests
|
||
Комплексное выполнение запросов к тестовой инстанции Cassandra
|
||
Обработка обновлений схемы
|
||
Разрешение связей
|
||
Пагинация и фильтрация
|
||
Сценарии ошибок
|
||
|
||
### Performance Tests
|
||
Производительность запросов при высокой нагрузке
|
||
Время отклика для различных уровней сложности запросов
|
||
Использование памяти при работе с большими наборами результатов
|
||
Эффективность пула соединений
|
||
=======
|
||
### Юнит-тесты
|
||
Генерация схем из определений RowSchema.
|
||
Разбор и проверка запросов GraphQL.
|
||
Логика генерации запросов CQL.
|
||
Реализации решателей полей.
|
||
|
||
### Контрактные тесты
|
||
Соответствие контракту сообщений Pulsar.
|
||
Достоверность схемы GraphQL.
|
||
Проверка формата ответа.
|
||
Проверка структуры ошибок.
|
||
|
||
### Интеграционные тесты
|
||
Комплексное выполнение запросов к тестовой инстанции Cassandra.
|
||
Обработка обновления схем.
|
||
Разрешение взаимосвязей.
|
||
Пагинация и фильтрация.
|
||
Сценарии ошибок.
|
||
|
||
### Тесты производительности
|
||
Пропускная способность запросов при нагрузке.
|
||
Время отклика для различных уровней сложности запросов.
|
||
Использование памяти с большими наборами результатов.
|
||
Эффективность пула соединений.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
## План миграции
|
||
|
||
Миграция не требуется, так как это новая функциональность. Сервис будет:
|
||
<<<<<<< HEAD
|
||
1. Считывать существующие схемы из конфигурации
|
||
2. Подключаться к существующим таблицам Cassandra, созданным модулем хранения
|
||
3. Начинать принимать запросы сразу после развертывания
|
||
|
||
## Сроки
|
||
|
||
1-2 неделя: Реализация основного сервиса и генерация схемы
|
||
3 неделя: Выполнение запросов и трансляция CQL
|
||
4 неделя: Разрешение связей и оптимизация
|
||
5 неделя: Тестирование и настройка производительности
|
||
6 неделя: Интеграция с шлюзом и документация
|
||
|
||
## Открытые вопросы
|
||
|
||
1. **Эволюция схемы**: Как сервис должен обрабатывать запросы во время изменений схемы?
|
||
Вариант: Помещать запросы в очередь во время обновлений схемы
|
||
Вариант: Поддерживать несколько версий схемы одновременно
|
||
|
||
2. **Стратегия кэширования**: Следует ли кэшировать результаты запросов?
|
||
Рассмотреть: Временное истечение срока действия
|
||
Рассмотреть: Инвалидация на основе событий
|
||
|
||
3. **Поддержка федерации**: Следует ли сервису поддерживать GraphQL federation для объединения с другими источниками данных?
|
||
Это позволит выполнять унифицированные запросы к структурированным и графовым данным
|
||
|
||
4. **Поддержка подписок**: Следует ли сервису поддерживать GraphQL subscriptions для получения обновлений в реальном времени?
|
||
Это потребует поддержки WebSocket в шлюзе
|
||
|
||
5. **Пользовательские скаляры**: Следует ли поддерживать пользовательские скалярные типы для специфических типов данных?
|
||
Примеры: DateTime, UUID, JSON-поля
|
||
=======
|
||
1. Считывать существующие схемы из конфигурации.
|
||
Подключаться к существующим таблицам Cassandra, созданным модулем хранения.
|
||
3. Начинать принимать запросы сразу после развертывания.
|
||
|
||
## Открытые вопросы
|
||
|
||
**Эволюция схемы**: Как сервис должен обрабатывать запросы во время переходов схемы?
|
||
Вариант: Помещать запросы в очередь во время обновлений схемы.
|
||
Вариант: Поддерживать несколько версий схемы одновременно.
|
||
|
||
**Стратегия кэширования**: Следует ли кэшировать результаты запросов?
|
||
Рассмотреть: Временное истечение срока действия.
|
||
Рассмотреть: Инвалидация на основе событий.
|
||
|
||
**Поддержка федерации**: Должен ли сервис поддерживать федерацию GraphQL для объединения с другими источниками данных?
|
||
Это позволит выполнять унифицированные запросы к структурированным и графовым данным.
|
||
|
||
**Поддержка подписок**: Должен ли сервис поддерживать подписки GraphQL для получения обновлений в режиме реального времени?
|
||
Это потребует поддержки WebSocket в шлюзе.
|
||
|
||
**Пользовательские скаляры**: Должна ли поддерживаться поддержка пользовательских скалярных типов для специфических типов данных?
|
||
Примеры: DateTime, UUID, поля JSON.
|
||
|
||
## Ссылки
|
||
|
||
Техническая спецификация структурированных данных: ⟦CODE_0⟧
|
||
Документация Strawberry GraphQL: ⟦URL_0⟧
|
||
Спецификация GraphQL: ⟦URL_0⟧
|
||
Документация Cassandra Driver: ⟦URL_0⟧
|
||
Документация Pulsar: ⟦URL_0⟧
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
## Ссылки
|
||
|
||
Техническая спецификация структурированных данных: `docs/tech-specs/structured-data.md`
|
||
Документация Strawberry GraphQL: https://strawberry.rocks/
|
||
Спецификация GraphQL: https://spec.graphql.org/
|
||
Справочник Apache Cassandra CQL: https://cassandra.apache.org/doc/stable/cassandra/cql/
|
||
<<<<<<< HEAD
|
||
Документация TrustGraph Flow Processor: Внутренняя документация
|
||
=======
|
||
Документация процессора потоков TrustGraph: Внутренняя документация
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|