Быстрое взаимодействие с базой данных - PullRequest
2 голосов
/ 01 марта 2011

Я разрабатываю проект, который получает данные от оборудования каждые 100 миллисекунд.Я использую Visual Studio 2010 и C #.Размер данных составляет около 50 КБ в каждом раунде.Заказчик хочет зарегистрировать все данные в базе данных для статистических целей.
Я предпочитаю использовать SQL Server 2005+, так как я знаком с ним, и проект должен быть выполнен примерно через 15 дней, это небольшой проект.

  • Это разумная скорость для такого размера данных, который будет вставлен в БД?Предлагаете ли вы какие-либо общие подходы для ускорения взаимодействия?(с помощью команд sql, EF, других технологий, которые могут оказать положительное влияние на скорость).
  • Если это слишком быстро для обработки SQL Server, что вы предлагаете мне использовать:
    1 - имеет кривую быстрого обучения.
    2 - может принимать запросы для статистических данных.
    3- может удовлетворить мои потребности в скорости

Я думаю о System.Data.SQLite Если SQL Server не нужен.Но я не знаю о кривой обучения и улучшениях скорости.

Ответы [ 2 ]

4 голосов
/ 02 марта 2011

500kb в секунду - ничто.Я работаю с базами данных Sql, которые обрабатывают гигабайты в секунду, все зависит от конфигурации оборудования и сервера, но предположим, что вы должны были запустить это на стандартном офисном рабочем столе, у вас все будет хорошо.Даже тогда я бы сказал, что вы можете начать думать о новом оборудовании, если вы посмотрите на скорость 20 Мбит / с или более.

Вторая часть вашего вопроса.Поскольку вы используете c #, я предлагаю вам использовать SQL 2008, а затем использовать параметр с табличным значением (TVP), а затем буферизовать данные в приложении, в наборе данных или в таблице данных, пока у вас не будет, скажем, 10K строк, а затем вы вызываете procсделать вставку, и все, что вам нужно сделать, это передать его в качестве параметра.Это сэкономит сотни или тысячи специальных вставок.

Надеюсь, это понятно, если нет, спросите, я постараюсь объяснить дальше.

3 голосов
/ 01 марта 2011

50 КБ каждые 100 миллисекунд - это 500 КБ в секунду.В наши дни сети работают на гигабитных скоростях (многие мегабайты в секунду), а жесткие диски могут справляться с сотнями МБ в секунду.500 КБ - это небольшой объем данных, поэтому я был бы очень удивлен, если SQL-сервер не может его обработать.

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

  • Буферизуйте данные локально (и / или на сервере) и запишите их в базу данных с помощью отдельного потока / процесса.Если вы не ведете постоянную запись в журнал 24 часа в сутки, то медленный сервер будет перегружен, когда вы закончите регистрацию.Даже если вы входите в систему непрерывно, это сгладит любые неровности (например, если у вашего сервера есть периоды «занятого времени», когда он делает так много всего, что ему трудно идти в ногу с данными из вашего регистратора)

  • Сжатие данных, отправляемых на сервер, чтобы было меньше данных для отправки / хранения.Если пакеты похожи, вы можете обнаружить, что вы можете получить огромные коэффициенты сжатия.

  • Если вам не нужно все в каждом пакете, удалите что-нибудь «неинтересное» из данных перед загрузкой..

  • Возможно, пакетирование данных может помочь - собрав несколько пакетов и отправив их сразу, вы сможете минимизировать накладные расходы при передаче.

  • Просто сохраняйте данные непосредственно на диск и используйте базу данных только для индексации данных.

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

...