2010-01-10 3 views
2

Hai guys,Каков наиболее эффективный способ вставки тысяч записей после события click?

Я разработал веб-приложение с использованием asp.net и sql server 2005 для системы управления посещаемостью. Как вы знаете, деятельность по посещаемости будет проводиться ежедневно. Вставка записи по одному - это плохая идея, я знаю, что мои вопросы

  • ли SqlBulkCopy единственный вариант для меня при использовании сервера SQL, как я хочу, чтобы ввести 100 записей на событие щелчка (т.е.) вставив посещаемость одного класса, который содержит 100 студентов? Я хочу вставить посещаемость классов один за другим?
+2

Откуда берутся данные? Кто-то вводит его в форме данных на стойке регистрации? Штрих-код сканируется ручным считывателем? Лист посещаемости, на котором преподаватель был в какой-то сканируемой форме? Откуда берутся данные? –

+0

@philip см. Мой отредактированный вопрос –

+0

Ребята, шелковистые каким-то образом получили мой вопрос –

ответ

7

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

Если ваши рекорды посещаемости более, что вы на победителя, получая, что многие люди, чтобы посещать любые функции или курсы вы работаете :-)

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


Update 1:

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

Если это так, это не база данных, замедляющая вас, ни веб-приложение. Как быстро вы можете печатать.

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

Это, конечно, предполагается, что данные, к которым вы входите, доступны в электронном виде. Если все, что вы получаете, это кусочки бумаги с подробными сведениями о посещаемости, вам, вероятно, не повезло (несмотря на все решения OCR), хотя, если бы вы могли делать многолюдные люди, делающие это одновременно, у вас может быть некоторый шанс сделать это своевременно манера. Нанимая 1500 человек, каждый из них должен сбить его через пять минут :-)

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


Update 2:

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

Где узкое место я не могу сказать, но вы должны это расследовать.

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

  • взять операцию офф-лайн (то есть, запустить его в фоновом режиме на сервере), предоставляя пользователю идентификатор для проверки состояния от другого стр.
  • То же самое, но уведомлять пользователя по электронной почте после его завершения.

Это позволило им продолжить свою работу асинхронно.

+0

@paxdiablo Мне нужно вставлять 1500 записей ежедневно. Вставка по одному занимает слишком много времени. Любые средства защиты –

+0

1500 записей - очень маленькая сумма. Можно было бы ожидать, что правильно настроенное ядро ​​сервера SQL будет выполнять больше, чем в секунду! –

+3

Вы говорите, что на самом деле вы пишете 1500 инструкций вставки (вручную) для выполнения этой работы? Если так, вы правы, это безумие. Но, полагая, что они получены из плоского файла где-то, вы просто пишете программу для вставки для вас (на основе этого файла). И если они не находятся в каком-либо файле, объемные вставки не помогут - вам все равно придется вводить данные.Если вы программно вставляете их, и вы не можете пройти через 1500 в день, есть серьезные проблемы с вашей СУБД. – paxdiablo

0

Самый быстрый способ - использовать ExecuteNonQuery.

internal static void FastInsertMany(DbConnection cnn) 
{ 
    using (DbTransaction dbTrans = cnn.BeginTransaction()) 
    { 
     using (DbCommand cmd = cnn.CreateCommand()) 
     { 
      cmd.CommandText = "INSERT INTO TestCase(MyValue) VALUES(?)"; 
      DbParameter Field1 = cmd.CreateParameter(); 
      cmd.Parameters.Add(Field1); 
      for (int n = 0; n < 100000; n++) 
      { 
       Field1.Value = n + 100000; 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     dbTrans.Commit(); 
    } 
} 

Даже на медленном компьютере это займет гораздо меньше секунды для 1500 вставок.

[reference]

1

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

Я предлагаю одну вещь, которая не поможет вам сразу:

  • Пересмотрите ваш дизайн немного, так как это, кажется, не особенно велика (от точки ДБ зрения). Но это только общее предположение, я мог бы быть неправилен

Более полезное предложение:

  • ли это в автономном режиме (с помощью службы Windows, или аналогичной)

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

+0

@silky у меня есть мой вопрос –

+0

@silky: +1 для ваших психических способностей! –

+0

@Pandiya: Если это правда, и шелковистое правильно, что-то не так с вашим кодом вставки, пожалуйста, разместите его здесь, чтобы мы могли видеть, где это происходит. – Hogan

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