Zend Framework: метаатрибуты (ключевые слова / описание) из базы данных - PullRequest
2 голосов
/ 25 августа 2010

Я создаю веб-сайты через Zend Framework, и я уже давно думаю об этом ...

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

Однако представьте себе случай, когда у вас меньше динамического контента, и пока выиспользование помощника вида HeadMeta () для добавления мета-ключевых слов / мета-описания на страницу.

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

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

Так что, возможно, мы могли бы также добавить параметры, но вы можете игнорировать несколько одновременно (так как нет необходимости принимать во внимание параметр? Page = 12 ...).Может быть, добавление еще одного столбца varchar в индекс с сериализованными параметрами?

Или добавление всего URL и выполнение выбора REGEXP вместо обычного выбора?(Я предполагаю, что это, вероятно, будет самым медленным решением ...)

Также обратите внимание, что mySQL имеет ограничение на индексы UTF-8 около varchar (200) (таким образом, один огромный URL не может быть сохранен)

Кто-нибудь думал о хорошем способе решения этой проблемы?

1 Ответ

1 голос
/ 27 августа 2010

Мне кажется, что структура данных правильная: ключевые слова / описание мета должны быть для каждой статьи.

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

Обычно я использую класс обслуживания ( см. Пример ), настроенный с помощью dbсоединение, а также кэширует данные, которые он получает.Время жизни кэша можно установить достаточно коротким, чтобы даже кэшированные данные были «достаточно свежими».В качестве альтернативы вы можете очистить / заполнить кэш с помощью cron, чтобы внешние запросы всегда получали попадание в кэш.Или вы можете установить время жизни кэша на вечность и очищать / заполнять его только при обновлении на стороне администратора;жизнеспособность этого подхода зависит от частоты обновления.

После того, как вы получили данные, они запихивают значения в помощник вида HeadMeta.

...