2013-10-07 2 views
0

У меня есть внутренний API для моей компании, который содержит большое количество фактических данных (80MM записей на данный момент). У меня есть четыре клиента, которые подключаются ко мне на регулярной основе. Основной вызов API добавляет новый элемент в базу данных, проверяет его подлинность и затем возвращает структурированные, проанализированные данные на основе представленного элемента.Как лучше уведомлять клиентов об изменениях данных через API

Со временем, поскольку мы идентифицируем больше данных, которые должны быть связаны с элементом, мне нужно, чтобы мои клиенты знали, что записи изменились.

Прямо сейчас у меня есть конечная точка /recent, которая возвращает все записи, которые изменились с $timestamp. Это отлично подходит для небольших наборов данных, но, учитывая большое количество транзакций, можно легко завершить работу с недавним набором данных более миллиона элементов, особенно если есть большой импорт данных.

Еще одна идея, которую я имел, заключалась в том, чтобы использовать веб-крючки для передачи данных клиентам, но тогда проблема становится толкающей слишком много данных. Мои клиенты не обязательно нуждаются в обновлениях для каждого измененного элемента - возможно, им нужны только те, которые они уже отправили.

вопрос меньше о коде и больше о шаблонах проектирования или стратегии коды:

Каковы оптимальные стратегии для уведомления своих клиентов обновленных записей без затопления своих клиентов с ненужными запросами или предоставления миллионов записей на голосование?

ответ

0

Я использовал сторонние API (такие как Amazon), которые разбивают большие запросы. Если набор данных превышает лимит страницы, клиент должен сделать другой запрос для следующей страницы. Это будет в комбинации с последней конечной точкой.

Фактическая реализация будет что-то вроде

{ 
    requestId: "foobar", 
    page: 0, 
    pages: 10, 
    data: { 
    ... 
    } 
} 

Клиент делает запрос и получает первую страницу данных, а затем посылает к конечной точке requstId и номер страницы. Как-то вы хотите сохранить ссылку на то, какие данные соответствуют запросу.

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