2010-04-12 4 views
1

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

Ситуация:

  • Программа должна обновить в ближайшее реальное время (+/- 1 минута).
  • Он включает в себя перемещение объектов по системе координат.
  • Существует ряд событий, которые происходят через равные промежутки времени (т. Е. Создание объектов).
  • Движения могут меняться в любое время через пользовательский ввод.

Мое решение было:

  • Построить сервер, который работает непрерывно и сохраняет данные внутри.
  • Сервер регулярно выгружает состояние программы для защиты от сбоев питания и/или сбоев.

Он утверждал, что для программы требуется база данных, и я должен использовать cronjob для обновления данных. Я могу хранить информацию о движении, сохраняя начальную точку, конечную точку и скорость и обновляя положение в cronjob (и вычисляя коллизии с другими объектами), вычисляя направление и скорость.

Его причины:

  • Требуется больше CPU & памяти, потому что она работает постоянно.
  • Powerfailures/Crashes могут уничтожить данные.
  • Базы данных быстрее.

Мои доводы против этого в основном:

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

Ваше мнение по этому вопросу?
Какие аргументы вы можете добавить для любой стороны?

+0

Он утверждал, что «сохраняет начальную точку, конечную точку и скорость»: тогда вы можете позволить клиенту вычислить позицию. Таким образом, ваш сервер может сосредоточиться на одном; который эффективно хранит данные. Это можно сделать лучше всего с помощью базы данных. Иначе вам придется программировать его самостоятельно, что менее продуктивно, если у вас есть опыт работы с базами данных. «Cronjobs» часто используются для очистки ненужных данных, и я думаю, что разумно, чтобы cronjobs удаляли ненужные данные из базы данных. Если вы используете базу данных на основе запросов, вы можете даже отфильтровать все ненужные данные. – Pindatjuh

ответ

1

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

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

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

О, и для его аргументации он работает постоянно: если у вас есть установленный cronjob или даже автономный оператор сна или аналогичный, он не использует никакого процессорного времени, когда он не работает, тот же количество, которое было бы, если вы используете РСУБД.

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

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

2

Базы данных не быстрее. Как глупо ... Как база данных может быть быстрее, чем писать пользовательскую структуру данных и хранить ее в памяти? Базы данных - это обобщенные инструменты для сохранения данных на диске для вас, поэтому вам не нужно писать весь код, чтобы сделать это самостоятельно. Поскольку они должны учитывать потребности многочисленных разнородных (а иногда и непоследовательных) бизнес-функций (постоянство (долговечность), целостность транзакций, кеширование, реляционную целостность, атомарность и т. Д. И т. Д.) И делать это таким образом, чтобы защитить разработчика приложения от нужно так много волноваться, по определению это будет медленнее.Это не обязательно означает, что его заключение ошибочно.

. Каждое из его других возражений можно решить, написав код для адреса, который выдает самостоятельно ... Но вы видите, куда это идет ... В какой-то момент усилия по разработке написания пользовательского кода для решения проблем которые важны для вашего приложения, перевешивают производительность, просто используя базу данных, которая уже делает все это из коробки ... Сколько из этих проблем важно? и знаете ли вы, как написать код, необходимый для их решения?

+1

Зачем нужна база данных? Данные в режиме реального времени не нужно хранить. Это бесполезно всего через 1 секунду. –

0

mySQL теперь может моделировать пространственные данные.

http://dev.mysql.com/doc/refman/4.1/en/gis-introduction.html

http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html

Вы можете использовать базу данных, чтобы отслеживать мировые местоположения, местоположения пользователей, предметы местах ЭСТ.

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

  • Нет связанных вопросов^_^