Хорошие альтернативы / практики "НРАВИТСЯ" с PostgreSQL и PHP? - PullRequest
3 голосов
/ 19 августа 2011

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

Я использовал

select * from log WHERE log_text LIKE 'Resource Kit 06%'

Проблема в том, что когда мы создаем календарь, используя LIKE 180+ раз (не менее 6 ресурсов в день), это происходит медленно, как может быть. Кто-нибудь знает способ ускорить это (имейте в виду, я не могу изменить базу данных). Кроме того, если я ничего не могу сделать на стороне базы данных, могу ли я что-нибудь сделать на стороне php?

1 Ответ

1 голос
/ 20 августа 2011

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

Возможно, вы можете использовать поисковую систему Lucene, которая способна выполнять полнотекстовую индексацию.Существует реализация из Zend , и даже в Apache есть http служба .Однако у меня нет возможности проверить это.

Если вы не используете что-то такое надежное, вы можете написать свой собственный механизм кэширования в php.Это будет не так быстро, как postgres, но, вероятно, быстрее, чем не проиндексированные LIKE-запросы.Если ваши запросы должны быть более изощренными (условия, группировка, упорядочение ...), вы можете использовать базу данных SQLite, основанную на файлах и не требующую дополнительного обслуживания на сервере.

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

Пожалуйста, будьте более конкретны с вопросом, если вам нужна более конкретная информация.

...