Обработка нескольких пользователей, одновременно заполняющих базу данных PostgreSQL - PullRequest
1 голос
/ 26 марта 2020

В настоящее время я пытаюсь создать веб-приложение, которое позволило бы многим пользователям запрашивать внешний API (я не могу регулярно получать все данные, обслуживаемые этим API, чтобы заполнить мою базу данных PostgreSQL по различным причинам). Я прочитал кое-что о ACID и MV CC, но все же я не уверен, что не возникнет никаких проблем, если несколько пользователей заполняют / читают мою базу данных PostgreSQL в одно и то же время. Поэтому здесь я прошу совета (я очень новичок в этой области)!

Допустим, мои пользователи запрашивают внешний API для получения статей. Они выполняют поиск через форму, серверная часть получает ее, запрашивает API, заполняет базу данных, а затем запрашивает базу данных, чтобы вернуть некоторые данные во внешний интерфейс.

  • Хорошо ли было бы просто создать уникальную таблицу для хранения статей, возвращаемых API, когда пользователи ее запрашивают?
  • Должен ли я хранить статьи, возвращаемые API, и связать каждого из них с пользователем, который его запросил (модель Article будет содержать сопоставление внешнего ключа с моделью User)?
  • Или я должен дать каждому пользователю таблицу (изоляция данных была бы хорошей, но звучит очень неэффективно)?

Спасибо за помощь!

1 Ответ

0 голосов
/ 26 марта 2020

Можно ли просто создать уникальную таблицу для хранения статей, возвращаемых API, когда пользователи ее запрашивают?

Да. Если статьи имеют уникальные ключи (doi?), Вы можете использовать INSERT ... ON CONFLICT. НИЧЕГО не обрабатывайте (предположительно очень редко), когда статья запрашивается двумя людьми почти одновременно.

Должен ли я хранить статьи, возвращаемые API, и связывать каждую из них с пользователем, который его запросил (модель Article будет содержать сопоставление внешнего ключа с моделью User)?

Хотите ли вы ? Есть ли причина для этого? Вас волнует, кто запрашивал каждую статью? Похоже, вы ожидаете сохранить только первый человек, который запрашивает каждую статью, а не каждый запрос?

Или я должен дать каждому пользователю таблицу (изоляция данных была бы хорошей, но это звучит очень неэффективно)?

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

...