Следует ли использовать базы данных только для сохранения

StackOverflow https://stackoverflow.com/questions/2955098

Вопрос

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

Это было полезно?

Решение

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

С другой стороны, если вы просто делаете много CRUD, вы мало теряете, рассматривая эту большую дорогую базу данных как тупой репозиторий. Но простые модели данных, которые придают себя ориентированной на приложения «обработки», иногда в конечном итоге приводят вас в будущее к ползучести непредвиденной неэффективности. Дизайн узлов. Вы обнаруживаете, что обрабатываете записи на уровне приложения. Взгляд на все способы, которые начинают приближаться к соединениям SQL. В конце концов вы мучительно рефактируете эти вещи обратно на уровне базы данных, где они более эффективно выполняют заказы ...

Итак, это зависит.

Другие советы

Какую «силу» базы данных вы не используете в 3-уровневой архиектуре? Предположительно, мы используем SQL в полном объеме, и все возможности управления данными, пейджинга, кэширования, индексации, оптимизации запросов и блокировки.

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

Я вижу две причины размещения его на сервере приложений:

1). Масштабируемость. Сравнительно трудно добавить больше двигателей Datbase, если БД слишком занят. Распределение данных в нескольких базах данных действительно сложно. Поэтому вместо этого вытяните бизнес -логику на уровень сервера приложений. Теперь у нас может быть много экземпляров сервера приложений, которые делают бизнес -логику.

2). Обслуживание. В принципе, сохраненная код процедуры может быть хорошо написанным, модульным и возобновляемым. На практике кажется гораздо проще писать по обслуживаемому коду на языке OO, таком как C# или Java. По какой-то причине повторное использование в хранимых процедурах, по-видимому, происходит путем вырезания и вставки, и поэтому со временем бизнес-логика становится трудной для поддержания. Я бы признал, что с дисциплиной это не должно произойти, но дисциплина, кажется, сейчас не хватает.

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

Нет. Они также должны использоваться и для обеспечения соблюдения деловых правил.

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

Я видел одно приложение, разработанное (довольно умным парнем) с таблицами вида:

id | one or two other indexed columns | big_chunk_of_serialised_data

Доступ к этому в приложении прост:существуют методы, которые загружают один (или набор) объектов, десериализуя его при необходимости.И есть методы, которые сериализуют объект в базу данных.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top