Каков наилучший способ вставить / обновить / удалить несколько записей в базе данных из приложения? - PullRequest
3 голосов
/ 04 сентября 2008

Учитывая небольшой набор сущностей (скажем, 10 или меньше) для вставки, удаления или обновления в приложении, каков наилучший способ выполнения необходимых операций с базой данных? Должно ли быть выдано несколько запросов, по одному для каждой организации, на которую будет оказано влияние? Или следует использовать какую-то XML-конструкцию, которая может быть проанализирована ядром базы данных, поэтому нужно выполнить только одну команду?

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

Ответы [ 5 ]

1 голос
/ 04 сентября 2008

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

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

1 голос
/ 04 сентября 2008

Вы не упомянули, какую базу данных вы используете, но в SQL Server 2008 вы можете использовать переменные таблицы для передачи сложных данных, подобных этой, в хранимую процедуру. Разбери его там и выполняй свои операции. Для получения дополнительной информации см. Статью Скотта Аллена о оде к коду .

0 голосов
/ 04 сентября 2008

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

Недавно мне пришлось реализовать механизм, при котором внешний поток данных давал мне ~ 17 000 строк данных, которые мне нужно было синхронизировать с локальной таблицей. Решение, которое я выбрал, состояло в том, чтобы загрузить внешние данные в промежуточную таблицу и вызвать хранимый процесс, который полностью синхронизировал базу данных.

0 голосов
/ 04 сентября 2008

С точки зрения дизайна "бизнес-объекта", если вы выполняете различные операции с каждым из набора объектов, вы должны иметь каждый объект обрабатывать свое собственное постоянство.

Если есть общие действия пакета (например, «удалить все старше x даты»), я бы написал статический метод для класса коллекции, который выполняет обновление или удаление пакета. Я обычно позволяю сущностям обрабатывать свои собственные вставки атомарно.

0 голосов
/ 04 сентября 2008

Большинство баз данных поддерживают операции BULK UPDATE или BULK DELETE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...