2011-02-14 4 views
2

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

В ситуации, которую я сейчас ищу, мне нужно получить данные узла и разрешить данные по двум полям вектора. Таким образом, это будет 3 звонка на node_load(). В какой-то момент здесь было бы более эффективно создавать запрос с помощью Joins напрямую?

Это предназначение для использования в автономном модуле, который не будет распространяться или использоваться где-либо еще, поэтому я не верю, что мне нужно беспокоиться о перегрузке узлов (или я?).

Edit:
Думая о моем вопросе более, node_load() только действительно применяется, когда у вас есть один узел, чтобы захватить (а затем, возможно бурение дальше вниз в nodereferences как в моем примере). Но как только вам нужно вернуть несколько узлов на основе некоторых критериев, вы в значительной степени вынуждены использовать db_query правильно? Есть ли у Drupal какой-либо абстрактный API для написания таких запросов?

ответ

6

Не полный ответ (не уверен сам), просто некоторые подсказки.

  • node_load() использует статический кэш (в Drupal 7, вы можете даже использовать модуль entity_cache, чтобы сделать его постоянным кэш). Если загруженные вами узлы используются во второй раз на одной странице, этот вызов будет бесплатным.

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

2

Рассуждения за использование методов API для БД вызовов по прямому DB вызовов является обеспечением БДА уровня абстракции, так что ваше приложение может перемещаться между поддерживаемыми базами данных двигателями и т.д., и это позволяет вашему приложению корректно обрабатывать любые изменения схемы (как бы маловероятно), что ядро ​​/ модуль может внести в соответствующие таблицы. Это также, вероятно, проще, поскольку @Berdir говорит для полей CCK и полей Node_Ref, но это зависит от того, с чем вы более уверены в использовании API-интерфейсов Drupal & PHP или MySQL ... выигрыш в этом процессе Drupal увеличивает производительность и понимание будущей производительности кодовая и что возможно :)

о, и мое эмпирическое правило - делать это так, как Drupal, если это вообще возможно (возможно быть переменной в зависимости от времени приложения/стоимость/производительность/все требования)

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