оптимизация скорости разбора php - PullRequest
0 голосов
/ 07 января 2011

Я хотел бы добавить всплывающую подсказку или сгенерировать ссылку в соответствии с элементом, доступным в базе данных, например, если напечатана html-страница:

для перезагрузки хоста Linux в однопользовательском режиме вы можете ...

Я буду использовать explode ("", $ row [page]), и идея состоит в том, чтобы теперь искать каждое слово на странице, чтобы выяснить, есть ли у них связанная ссылка в этом примере, скажем, у меня есть ссылка на таблицу: одна запись для перезагрузки и одна для Linux перезагрузка: перезагрузить компьютер Linux: операционная система

теперь мой вывод будет выглядеть (заменил <и> на @)

to @a href = "ref / reboot" @ reboot @ / a @ your @a href = "ref / linux" @ linux @ / a @ host в однопользовательском режиме вы можете ...

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

Мой главный вопрос и вопрос в том, как мне создать достаточно эффективный процесс для этого?

  • Должен ли я хранить все записи БД в массиве и сравнивать их?
  • Выполнить SQL-запрос для каждого слова (кажется сумасшедшим)
  • Сбросить таблицу в файл и использовать для этого очень длинное регулярное выражение или метод "grep -f pattern data"?
  • Или, или, или я уверен, что это должен быть лучший способ сделать это, просто не иметь понятия об этом, или, может быть, это будет слишком неудобно для ресурсов, и я должен избегать таких вещей.

ура!

Ответы [ 3 ]

2 голосов
/ 07 января 2011

в зависимости от количества ключевых слов в БД существует два решения. 1. если количество ключевых слов меньше количества слов в тексте. Затем вы просто извлекаете все ключевые слова из базы данных и сравниваете их. 2. если количество ключевых слов больше, чем количество слов в тексте. Динамически создать один запрос, который принесет все необходимые слова. например. ВЫБЕРИТЕ * ИЗ КЛЮЧЕЙ, ГДЕ Ключевое слово = 'система' ИЛИ ​​ключевое слово = 'Линукс' и т. Д.

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

0 голосов
/ 07 января 2011

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

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

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

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

0 голосов
/ 07 января 2011

Я бы добавил дополнительное поле для каждой статьи, которое будет содержать «версию таблицы ключевых слов», которая использовалась для обработки этой статьи.

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

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

Основная идея заключается в распределении нагрузки по запросам пользователей и кэшировании результатов.

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

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