#performance #sql-server-2008
#Производительность #sql-server-2008
Вопрос:
В настоящее время я разрабатываю систему баз данных для хранения результирующих данных с компьютера. Данные поступают с компьютера через Ethernet-соединение в приложение C #, которое анализирует данные и создает записи для данных в базе данных. Наши расчеты показывают, что нам нужно создавать не менее 12000 записей в секунду, чтобы не отставать от компьютера. Эти записи распределены примерно по десяти таблицам.
Мои первоначальные тесты дают нам не более 1800 записей в секунду в одной таблице. Мой код на C # выглядит следующим образом:
SqlCommand command = new SqlCommand ("insert tablename (column names) values (values)", connection);
command.ExecuteNonQuery ();
я признаю, что это наивная попытка.
Мои вопросы:
- Возможна ли такая скорость создания записей и
- Какой наилучший метод для достижения требуемой скорости?
База данных: SQL Server 2008
Язык: C # 2.0
Ответ №1:
Если данные поступают слишком быстро для загрузки в базу данных «в режиме реального времени», то:
- Обновите, получите лучшее аппаратное и программное обеспечение. Конечно, новая настройка все еще может быть недостаточно быстрой (и сможете ли вы протестировать ее, прежде чем выкладывать $ $ ?)
- Отложить. Попросите C # (или любой другой, если C # недостаточно быстр) передавать данные в форматированный файл (разделенный запятыми, XML, что угодно) куда-нибудь, и периодически закрывайте его, запускайте новый файл, и пусть SQL загружает данные, найденные в «последнем» файле.
- В SQL 2008 R2 есть функция «Stream Insight», которая могла бы быть применима здесь, хотя я бы определенно назвал это продвинутой темой.
Имейте в виду, что 12000 строк со скоростью 1 байт в секунду — это немного меньше 1 ГБ в день … если у вас по 100 байт в строке, это немного меньше 100 ГБ в день и 30 ТБ в месяц. Вы уверены в этих цифрах?
Комментарии:
1. Спасибо за это. Я очень уверен в цифрах. По нашим оценкам, около 2 ГБ в рабочий день, система обычно будет работать только в рабочее время.