2015-09-14 8 views
1

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

я бы следующие вопросы:

  • Если один источник в настоящее время пишущие к столу, а другой источник начинает писать в то же время, есть ли шанс вставки будут блокировать друг друга?

  • Таблица также постоянно используется для считывания данных через представление, которое объединяет несколько таблиц для отображения данных, может ли это представлять какие-либо проблемы?

  • В настоящее время каждый источник имеет собственное соединение с БД для записи данных, было бы лучше иметь только одно соединение или использовать каждый из них самостоятельно?

ответ

2

Если один источник в настоящее время пишет к столу, а другой источник начинает писать в то же время, есть ли шанс вставка будет блока друг с другом?

Это зависит от индексов. Если индексные ключи имеют одинаковые или смежные значения, вы можете увидеть короткое замыкание = срок для продолжительности транзакции.

В таблице также постоянно используется для считывания данных с помощью зрения , что присоединиться еще несколько таблиц, чтобы показать данные, это может представлять любые проблемы?

Это зависит от уровня изоляции. Без блокировки не будет происходить, если:

  • SELECT запросы выполняются в READ_COMMITTED уровне изоляции и вариант READ_COMMITTED_SNAPSHSOT базы данных включена

  • в SELECT запросы не трогают неподтвержденные данные

  • SELECT запросы выполняются в READ_UNCOMMITTED уровень изоляции

Даже если блокирование действительно происходит, оно может быть кратковременным, если короткие транзакции INSERT.

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

В зависимости от проблемы, которую вы пытаетесь решить. Единственное соединение гарантирует, что вставки не блокируются/блокируются друг с другом, но могут и не быть проблемой.

0
  1. Блок «друг друга», т.е. мертвая блокировка не представляется возможным.
  2. Нет проблем. Только если select слишком медленный, он может задержать следующую вставку.
  3. Нет проблем с различными соединениями.
1

Пожалуйста, найдите ниже встроенный ответ

Если один источник в настоящее время пишет к столу, а другой источник начинает писать в то же время, есть ли шанс вставки будут блокировать друг друга?

В этом случае другой ресурс будет ждать. (Insert будет находиться в состоянии ожидания для следующего)

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

Нет проблем.

В настоящее время каждый источник имеет собственное соединение с БД для записи данных, было бы лучше иметь только одно соединение или использовать каждый из них самостоятельно?

Его лучше иметь одно соединение с БД.

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