Как эффективно сохранять объекты в базе данных SQL 2000 - PullRequest
0 голосов
/ 25 июня 2009

Раньше, когда моему приложению требовалось вставить много записей в базу данных SQL 2000, я вызывал хранимую процедуру, один раз для каждой записи. Вставляя много записей, я обнаружил, что производительность пострадала, особенно при использовании толстого клиента, вызывающего веб-службу для выполнения вызова базы данных.

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

Мне лично нравится использовать слой Business Objects (BO), и у меня нет опыта работы с LINQ или Entity Framework, поэтому на данный момент давайте предположим, что эти инструменты находятся вне области видимости ...

В моем слое BO я обычно добавляю функцию «ToDataset» к объекту, чтобы преобразовать объект в набор данных с одной таблицей в нем, где эта таблица содержит одну строку данных. Именно само датаро содержит представление данных в объекте.

Тогда у меня будет класс коллекции, например, коллекция предыдущего объекта. Он также будет иметь метод "ToDataset" для создания представления всех объектов в классе коллекции. Эта функция будет перебирать объекты в коллекции, и для каждого вызывать функцию «ToDataset» объектов и объединять эту информацию в «накапливающийся» набор данных.

Когда я хочу передать все записи в классе коллекции в SP, я бы вызвал метод ToDataset класса Collection и передал XML для ds в SP.

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

Как хорошие разработчики делают такие вещи?

В следующем примере кода вы увидите, как я пытаюсь определить свои объекты так, чтобы они могли быть вложенными, но когда вы вызываете функцию Todataset для родительского объекта, все дочерние объекты свернуты в него с использованием шаблона определяется базовым классом. (Код не такой длинный, может быть, я должен опубликовать его. Если меня разжигут, я отправлю его)

Я ожидаю некоторых ужасных реакций. Будь добрым. : -)

Спасибо за ваш интерес к прочтению этого до конца.

http://sites.google.com/site/dokmanc/Home/ObjectToDataset.zip?attredirects=0

Ответы [ 2 ]

0 голосов
/ 02 июля 2009

Вы смотрели на SqlBulkCopy Class ?

Кстати, я только что видел этот вопрос. Тем не менее, я все еще, возможно, колебался, чтобы ответить на него, или даже прочитать очень много из этого. Как только вы объяснили, что отправляете XML для эффективной загрузки данных, вы в значительной степени сказали все, что могли сказать, чтобы получить ответ на вопрос.

0 голосов
/ 02 июля 2009

Абсолютно потрясающая стратегия. Не меняй ничего.

...