2016-08-12 3 views
1

Я смотрел API JSON и продолжал зависеть от сценариев масштабируемости. Допустим, у вас есть большая коллекция (1000) моделей, каждая из которых имеет 3 или 4 отношения.Масштабирование API JSON

Из моего понимания, JSON API требует указания по крайней мере, отношения и связанные с ними идентификатор (ы) (и, возможно, sideload отношения с include). Если коллекция 1000 моделей должен сделать JOIN для каждого отношения, чтобы иметь возможность заполнить правильный API полезной нагрузки JSON, как показано ниже:

... 
{ 
    "some_relationship_name": { 
    data: [ 
     { id: 1, type: "derp" } 
     ... 
    ] 
    } 
} 

Я не вижу, как это может возможно масштабировать в любой разумный путь.

ответ

0

Я не уверен, где вы можете видеть проблему. У вас есть 20 байт на отношения/4 отношения/1000 записей => ~ 100 кБ. Существующие адаптеры не должны иметь проблем с обработкой таких данных достаточно быстро.

Если вам нужно транспортировать меньше данных, существует несколько вариантов. Вы можете добавить сжатие, но помните, что для таких небольших данных обычно быстрее переносить данные, чем сжимать их.

Другой вариант - отправить только те данные, которые вам действительно нужны. Обычно вам не нужно 1000 записей в веб-приложении сразу. Поэтому пейджинг и ленивая загрузка должны помочь вам отправлять только те данные, которые действительно необходимы.

+0

Я должен был быть более ясным. Я не беспокоюсь о размере полезной нагрузки, я беспокоюсь о производительности JOIN. Как правило, с такими данными вам не нужно включать идентификаторы отношений, если вы не хотите, чтобы они были совместимыми с JSON API. – maschwenk

1

Вы не должны указывать отношения id. Вы можете просто указать links, чтобы обеспечить способ получения ссылок. Оформить заказ the specification.

Так что вы можете сделать что-то вроде этого:

{ 
    id: '1' 
    type: 'base' 
    relationships: { 
     relA: { 
      links: { 
       self: '/base/1/relationships/relA', 
       related: '/base/1/relationships/relA/related', 
      } 
     }, 
     ... 
    } 
    attributes: {...} 
} 

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

Смежные вопросы