2009-10-01 4 views
1

Мне нужно предоставить данные службе Windows обработки данных (односторонняя, слабосвязанная). Я хочу, чтобы служба была недоступна и т. Д. Не приводила к «потерянным» данным, что перезапуск службы Windows просто заставляет ее забирать работу там, где она ушла, и мне нужна система, которая должна быть действительно простой для устранения неполадок, поэтому я не использую MSMQ.Скорость файловой системы и базы данных для частой обработки данных

Так что я пришел с одним из двух решений - либо:

  • Я падаю текстовые файлы с обработкой данных в директории падения и ожидает окна обслуживания для уведомлений об изменении файлов, процессов и удаляет файл, то

или

  • вставить данные в специальной таблице в локальной базе данных MS SQL, а окна служба опрашивает базу данных для изменения s/новые элементы, а затем удаляет их, как они обрабатываются

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

Какой из результатов (или другой точки зрения) является лучшим решением здесь?

ответ

6

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

Однако есть и другие факторы, которые следует учитывать.

  • Не имеет значения, насколько быстро это происходит, как правило, только в том случае, если он достаточно быстро. Хранение и извлечение небольших капель - простая задача, и, вполне возможно, это никогда не станет вашим узким местом.
  • NTFS - это журнал, но только метаданные. Если сервер должен аварийно завершить работу в середине записи, файл может содержать тарабарщину. Если вы используете файловую систему файловой системы, вам необходимо быть надежным против произвольных данных в файлах. В зависимости от уровня кэширования и того, как файловая система использует прежнее пространство, эта тарабарщина может содержать сегменты других сообщений, поэтому вам лучше всего быть устойчивым даже против старого повторяющегося сообщения.
  • Если вы когда-либо захотите добавить новые функции с использованием более богатой модели сообщений, база данных будет легче расширена (скажем, своего рода слой кеширования).
  • Файловая система более «открыта» - это означает, что ее можно будет легче отладить с помощью действительно простых инструментов (блокнот), но также вы столкнетесь с более сложными проблемами с локальными службами индексирования, антивирусными сканерами, плохо установленными разрешениями или чем-либо еще происходит, чтобы жить в системе.
  • Большинство API не могут обрабатывать файлы с дорожками более 260 символов и плохо работать при столкновении с огромным количеством файлов. Если ваш каталог хранения станет слишком большим, такие вещи, как .GetFiles(), станут медленными, тогда как БД можно индексировать по метке времени, а самые новые сообщения будут получены независимо от старого беспорядка. Вы можете обойти это, но это дополнительное препятствие.
  • MS SQL не является бесплатным и/или не установлен в каждой системе. Для каждого нового сервера требуется немного дополнительного системного администрирования и более патчей, когда вы его используете. В частности, если ваше программное обеспечение должно быть тривиально установлено третьими лицами, то файловая система имеет преимущество.

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

0

Мой опыт работы с 2005 годом и ниже в том, что это намного медленнее с базой данных.
Особенно большой файл .. Это действительно портит память SQL сервера при выполнении сканирования таблиц

Однако
Новый SQL сервер 2008 имеет лучшую поддержку файлов в двигателе.