Я пишу приложение, которое записывает обновления состояния (местоположения GPS) с устройств в базу данных. Обновления происходят с установленным интервалом для каждого устройства, который в настоящее время каждые 3 секунды. Я использую простую таблицу в SQL Server 08 для хранения каждого обновления.
Я заметил, что запуск вставок - это область замедления в моем приложении. Это не серьезное замедление, но заметно. Естественно, я хотел бы написать в базу данных как можно более эффективным способом. У меня есть идея улучшить производительность, и я ищу информацию и совет, чтобы посмотреть, поможет ли это:
Обновления статуса поступают из асинхронного потока Socket. В моей текущей реализации вызов вставки базы данных выполняется из этого потока. Я думаю, что могу создать очередь для хранения данных обновления, к которой поток Socket может быстро добавить свое обновление и затем продолжить свой веселый путь. Тогда будет отдельный поток, единственной обязанностью которого будет проверка очереди обновлений и вставка обновлений в базу данных.
По сути, весь этот процесс основан на предположении, что запись в базу данных из одного места с кучей данных одновременно более эффективна, чем запись одной строки данных в случайное время. Правильно ли мое предположение или нет? Кроме того, на стороне SQL, есть ли команда, чтобы сказать ей, чтобы написать кучу строк одновременно, что улучшило бы производительность записи?
Вот как база данных записывается в:
Я использую LinqToSQL в C #, поэтому для каждой вставки я сначала создаю экземпляр DataContext. Затем из объекта DataContext я вызываю хранимую процедуру, которая вставляет обновление местоположения.
Таблица индексируется по дате и времени на момент обновления.