Передовая практика работы с базами данных
Я изучаю Drupal, и я хочу разработать веб-сайт, где главное - его база данных.
У меня уже есть Расширенная модель отношений сущности с базой данных (довольно сложная).
Какое правильное направление следует выбрать при создании базы данных, которая будет использоваться Drupal, создайте ее вручную и выполняйте запросы в Drupal с использованием PHP, как если бы это был сайт PHP+MySQL с нуля? Предоставляет ли Drupal более простой способ сделать это это?
Редактировать:
Я не являюсь опытным разработчиком Drupal. Что я хочу знать, так это:
- При работе с базами данных, есть ли лучший способ сделать это, чем запрашивать базу данных с использованием синтаксиса SQL, например, если бы я разрабатывал одну страницу PHP+MySQL?
Я просто хочу знать, что обычно делают разработчики Drupal, когда они хотят создать базу данных, вставить данные, изменить данные или выполнить некоторые запросы и показать данные пользователям.
4 answers
Ваша модель отношений сущностей, скорее всего, будет соответствовать тому, что мы называем "Типами контента" в Drupal.
Типы контента определяются с помощью модуля конструктора контента, обычно называемого CCK.
С помощью CCK вы указываете и щелкаете, чтобы определить, какие поля должны быть у типа контента - текстовые поля, числа, ссылки, ссылки на другие типы контента, ссылки на пользователей на вашем сайте Drupal.
Определив типы контента, вы можете выяснить, какого рода списки для нужного вам контента - табличные, в стиле блога и т. Д., И используйте модуль "Представления" для создания этого списка. Представления - это конструктор запросов "наведи и щелкни" с сортировкой, фильтрацией, контролем доступа, динамическими аргументами URL-адресов и связями (например, соединениями) с другими типами контента.
Обычно так делаются "базы данных" в Drupal - но на самом деле вам вообще ничего не нужно делать с базой данных.
Если у вас есть действительно конкретный вариант использования, который не может быть решен с помощью некоторых сочетание 7000 или около того модулей Drupal, внесенных в проект, тогда, возможно, пришло время взять копию "Pro Разработка Drupal" и изучить разработку модулей, чтобы интегрировать ваш пользовательский модуль в остальную часть Drupal для удовлетворения ваших конкретных потребностей.
Моя первая реакция заключается в том, что это, возможно, слишком простой вопрос, но, поразмыслив, на него стоит ответить, потому что он настолько важен для мышления при работе с Drupal, что вы склонны использовать отличную работу других, доступную через модули для большинства вещей, и вам нужно только немного написать PHP/SQL.
Итак, если вы не создаете модули для Drupal, вам, как правило, не нужно ничего знать о базовой базе данных или о том, как она работает.
С Drupal вы будете рабочие типы контента, узлы, представления модулей и CCK для создания большей части того, что вам нужно с сайта. Эти модули являются строительными блоками, а не полным отбрасыванием плагинов, которые выполняют один, как можно было видеть в менее хорошо спроектированных системах. Не совершайте ошибку, думая, что Drupal - это CMS, это больше похоже на стандартную платформу без слишком большого количества кода.
Вы можете очень быстро получить от 0 до 95% функциональности для большинства вещей, просто используя ядро и некоторые хорошо подобранные модули.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не разработчик Drupal
Всякий раз, когда вы используете MySQL, вы должны планировать объем хранилища, который, как вы ожидаете, будет использовать ваш сайт.
Исходя из личного опыта в качестве администратора базы данных MySQL, я очистил установки Drupal и оптимизировал запросы с учетом нескольких основных принципов.
Главное, что я делаю для любого клиента Drupal, - это ПРЕОБРАЗОВАТЬ ВСЕ ДАННЫЕ MySQL В INNODB. Это устранит блокировку таблиц, особенно на сайте с высоким трафиком . Вы должно быть, все средства используют опцию innodb_file_per_table.
Вы должны убедиться, что можете кэшировать все свои данные InnoDB. Поэтому имейте достаточно памяти, чтобы вместить это. Не забудьте настроить sort_buffer_size, join_buffer_size, read_buffer_size, read_rnd_buffer_size и умножить их сумму на max_connections. Убедитесь, что общая память, потребляемая MySQL (innodb_buffer_pool_size + key_buffer_size + (sort_buffer_size + join_buffer_size + read_buffer_size+ read_rnd_buffer_size) X max_connections) не превышает 90% установленной оперативной памяти.
Всегда рекомендуется проверять уровень БД. Как только вы реализуете эти предложения, следует рассмотреть возможность обслуживания уровня БД, когда у вас наблюдается значительный рост объема данных или подключений. В противном случае это должно быть редким явлением.
Если вы являетесь обычным пользователем, все, что вам нужно сделать, это установить сайт через install.php , и единственное, что вам нужно знать о базе данных, - это имя, пользователь и пароль, об остальном позаботится Drupal.
Если вам нужно выполнить какую-либо форму запросов в качестве пользователя, вы бы использовали модуль Представления, опять же, на самом деле вам не нужно ничего знать о базе данных.
Если вы разработчик, пишущий пользовательский код или модуль contrib, и вам нужно было хранить информация в базе данных, возможно, вам потребуется написать некоторые запросы, а о других могут позаботиться некоторые функции Drupal.
Настройка базы данных в первую очередь вы бы использовали hook_schema(), где вам просто нужно вернуть вашу схему в требуемом формате.
Наилучший практический подход к написанию/обновлению записей в одной таблице заключается в использовании drupal_write_record().
Есть еще много чего почитать можно найти по адресу: http://api.drupal.org/api/drupal/includes--database--database.inc/group/database/7
Также обратите внимание, что документация относится к конкретной версии.
Надеюсь, это в какой-то мере ответит на ваш вопрос.