Моя схема GraphQL включает объекты, которые имеют большие массивы данных, которые являются уникальными для этого объекта и не будут найдены в других объектах.
Пример:
type Position {
time: Integer
latitude: Float
longitude: Float
}
type ObjectInSpaceAndTime {
name: String
positions(start: Int, end: Int): [Position]
}
Мое понимание нормализации в GraphQL Client заключается в том, что граф ответов будет сглаживаться, каждый экземпляр Position
извлекается в кэш, для него создается уникальный ключ (с пути позиции, так что-то вроде someobject.positions.42
).Это очень загружает процессор и память с тысячами значений.
Кеш будет выглядеть следующим образом:
{
__ObjectInSpaceAndTime.someid: {name: 'xxx'},
__ObjectInSpaceAndTime.someid.positions.0: {time: 1221121, latitude: 0, longitude: 0},
__ObjectInSpaceAndTime.someid.positions.1: {time: 1221122, latitude: 0, longitude: 0},
// ...
}
Вместо этого я хотел бы сказать Apollo Client не пытаться нормализовать это и просто сохранить весь экземпляр ObjectInSpaceAndTime
с его полямии, возможно, параметры, передаваемые в поля, чтобы запрос с другими атрибутами приводил к отсутствию кэша.Это значительно уменьшит работу, которую Аполлон выполняет в памяти при обработке ответа.Массив данных будет десериализован один раз из ответа и может использоваться без перебора клиента apollo-client.
{
__ObjectInSpaceAndTime.someid: {name: 'xxx',
positions: [ {time: 1221121, latitude: 0, longitude: 0},
{time: 1221122, latitude:0, longitude: 0},
/* ... */ ],
// ...
}
Возможно ли это с клиентом Apollo?Я не могу найти способ сделать это.
Также приветствуются предложения о том, как лучше смоделировать этот «график».