Есть ли роль для администратора баз данных, когда приложение использует постоянный уровень или репозиторий? - PullRequest
4 голосов
/ 09 октября 2008

Я занимаюсь ре-архитектурой пары приложений, использующих Hibernate в одном случае и комбинацию Hibernate и Java Content Repository (в частности, JackRabbit ) во втором.

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

Обратите внимание, что я не подвергаю сомнению ценность участия администратора баз данных в управлении производственными базами данных. Но в прошлых проектах было важно привлечь хорошего администратора базы данных на этапах проектирования и кодирования, разработки способов оптимизации структур данных, внедрения кода в хранимые процедуры и т. Д.

Но, учитывая, что структуры баз данных почти полностью управляются Hibernate и JackRabbit, у них мало возможностей для их оптимизации. Конечно, если мы обнаружим, что они не работают должным образом, администратор базы данных мог бы потенциально идентифицировать проблемы, и мы могли бы отправлять исправления для их исправления, но я не знаю, что мы хотели бы (или могли бы) многое сделать на пути приложения. специфический тюнинг.

Еще одна причина, по которой возникает вопрос о роли администратора баз данных в приложениях такого типа, заключается в том, что большая часть проблем с производительностью, скорее всего, выше уровня персистентности, т. Е. Дело не в том, что база данных, спящий режим или JackRabbit слишком медленные, а в том, что что то, как мы структурировали наши данные и применили их, не очень хорошо. Для решения этой проблемы потребуется моделирование данных, но средой реализации являются файлы XML и код Java, а не таблицы базы данных и SQL. А администратор БД, как правило, много знает об этом?

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

Мне не хватает ключевых моментов? Может ли квалифицированный администратор баз данных настроить файлы конфигурации гибернации, чтобы сделать их быстрыми темпами для конкретных случаев использования моего приложения? Разве это безумие - подумать о запуске приложения Hibernate с высокой нагрузкой без необходимости вручную настраивать DBA, настраивать индексы и т. Д.? Или в среде разработки появилось новое существо, специализирующееся на оптимизации моделей данных на основе XML и абстрактных уровней персистентности?

Ответы [ 5 ]

7 голосов
/ 09 октября 2008

Есть DBA и есть DBA. Некоторые администраторы баз данных - администраторы - резервное копирование, восстановление, предоставление, отзыв - такие люди. Держите огни. Основополагающие.

Другие DBA - архитекторы / дизайнеры. «Для исправления этой ситуации потребуется моделирование данных». Это то, чем должен заниматься администратор базы данных .

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

  1. Они одержимы соглашениями об именах таблиц и столбцов.

  2. Они одержимы отношениями FK / PK, игнорируя тот факт, что после того, как вы извлекли строки и превратили их в объекты, у вас есть множество богатых, сложных классов коллекции, доступных для управления отношениями.

  3. Они не могут отделить строки в таблице от Объектов в приложении и реальных сущностей, для которых обе вещи являются реализациями. Это часто может быть шоу-стопором. Если у вас есть сложный объект реального мира, который реализован сложной структурой языка программирования, а также сопоставлен со сложной структурой базы данных, это может привести к путанице. А некоторые люди отступают в свою зону комфорта и начинают повторять бессмысленные фразы, такие как «Это всего лишь биты» или «В конечном счете, все ФК, даже ссылки на объекты».

  4. Требуя, чтобы все было хранимой процедурой "потому что это быстрее". Это хуже, если они не могут предоставить доказательства.

Вот в чем суть ...

Производительность зависит от двух вещей: Структуры данных и алгоритмы . Минимизация использования ресурсов (ввод-вывод, память и т. Д.) Осуществляется путем выбора правильных структур данных и алгоритмов.

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

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

По сути, молниеносная скорость исходит из рассмотрения самых внутренних и самых внутренних петель: что они зацикливают? Что они ищут? Как их можно заменить чем-то, что не зацикливается или вообще не зацикливается?

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

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

3 голосов
/ 09 октября 2008

Это безумие - подумать о приложение Hibernate с высокой нагрузкой без DBA вручную настраивает саму DB, строительные индексы и т. д.

Да, поскольку (AFAIK) Hibernate не выполняет оптимизацию БД, поскольку эти вещи всегда зависят от рабочей нагрузки.

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

2 голосов
/ 09 октября 2008

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

Если у вас большое приложение с большим количеством данных и производительность критична, я, вероятно, не буду использовать автоматически созданные определения таблиц. Я хотел бы полностью оптимизировать структуру базы данных, а затем написать сопоставления Hibernate, чтобы использовать это. Если у вас есть администратор базы данных, который немного понимает разработку, он может даже написать HQL или пользовательский SQL, чтобы улучшить ситуацию.

(я никогда не использовал JackRabbit, поэтому не могу комментировать)

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

0 голосов
/ 09 октября 2008

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

0 голосов
/ 09 октября 2008

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

...