2012-01-06 2 views
0

У меня есть таблица базы данных с полем, содержащим RTF (Rich Text Format). Мне нужно преобразовать RTF в HTML, чтобы отобразить его позже в редакторе HTML.Рекомендации по производительности для выполнения повторяющихся UPDATES в базе данных

Для этого я разработал консольное приложение, которое для каждой записи таблицы считывает поле RTF и преобразует его в HTML. Этот шаг будет выполнен только один раз (это уникальный процесс миграции), и есть около 1500 записей, затронутых.

Поскольку количество записей, участвующих не настолько высота, производительность не будет deeeply затронута, но игнорируя на данный момент объем данных я хотел бы знать, что было бы лучшим образцом для такого рода сценариев:

1) Extract data from DB<br> 
2) Execute modification on that data<br> 
3) Update the relative row with modified values 

Учитывая, что я использую LINQ to SQL, все еще допустимо выполнить submit() для каждой модифицированной записи или было бы лучше хранить измененные записи в разрыве данных (например, HashTable с идентификатором, modifiedValue) и сделать одиночный submit() для всех?

ответ

1

Производительность на СУБД, как правило, зависит от аппаратного обеспечения в следующем порядке:

  1. пропускной способности сети
  2. диск латентность
  3. пропускная способность диска
  4. скорость памяти
  5. скорость процессора

Со стороны программного обеспечения узкое место обычно по меньшей мере, один из них, не обязательно в таком порядке, и последствия могут варьироваться от первого до последнего в вышеприведенном списке:

  • алгоритма
  • индексы
  • план запроса
  • сделка

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

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

Если СУБД Microsoft SQL Server 2005 или выше, вы можете запустить все это на самом сервере с помощью CLR Integration и устранить аппаратное краевое номер 1.

+0

+1 за хорошее объяснение. Консольное приложение будет выполняться один раз на том же сервере, на котором находится база данных, поэтому не будет задержки в сети. Я использую SQL Server 2008 R2, но я предпочел бы, если возможно, использовать LINQ, sine. Я еще не знаком с CLR Integration, и это всего лишь шаг «сделать это один раз и забыть» с коротким сроком. – Francesco

+0

@ Luca спасибо. Запуск на консоли немного медленнее, чем CLR (CLR немного сложнее), но будет работать так же хорошо, как «сделать один раз и забыть». –

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