Поиск ссылок на текстовое содержимое в базе данных MySQL - PullRequest
0 голосов
/ 09 августа 2010

Есть сайт, содержащий десятки текстовых фрагментов, каждый из которых может иметь ссылки, и мне нужно создавать связи между фрагментами.Фрагменты хранятся в базе данных, структура базы данных следующая:

фрагмент: первичный ключ id, заголовок varchar (255), url varchar (400), ссылки на основной текст: snippet_id, crc32_sum обратные ссылки: snippet_id, links_to

процесс добавления нового фрагмента:

  1. sanitize url, сгенерируйте его сумму crc32 и найдите все записи в таблице ссылок, имеющие crc32_sum = new urls crc32 sum.если есть такие записи, добавьте их в обратные ссылки, где snippet_id - это запись с новыми URL-адресами. crc32 sum и links_to - id новых фрагментов

  2. захватывает все ссылки из нового текста фрагментов, очищает их, вычисляет их crc32суммируйте и помещайте все в ссылки, где snippet_id - это идентификатор нового фрагмента, а crc32 - сумма найденной ссылки.

очистка URL и захват ссылок выполняются с помощью PHP, crc32 работает в MySQL.

Можно ли как-то оптимизировать этот процесс?Я добавил индексы в MySQL, попытался поместить в запрос как можно больше crc32, но все равно он очень медленный: (* ​​1019 *

1 Ответ

0 голосов
/ 09 августа 2010

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

фрагменты : идентификатор, заголовок, URL, текст

ссылки : fromid, turl, toid

Я не эмулирую здесь хеширование для упрощения схемы, а также потому, что MySQL может хорошо индексировать строки. При необходимости хэши можно эмулировать с индексом md5 (в двоичном виде). ​​

Итак, когда вы вставляете новый фрагмент, вы делаете следующее:

Вставьте новый фрагмент в БД и получите last_insert_id (). Поиск ссылки таблица записей, где toid = 0 и tourl = snippet.url . Обновление найдено в таблице links с новым значением toid . Это обратные ссылки для нашего фрагмента.

Извлечение ссылок из фрагмента и итерация фрагментов таблицы, где url = extract_link . Вставьте необходимые записи в ссылки таблицу.

Вот и все. Если это будет медленно, нам понадобится больше данных: какая часть этого является медленной точно, что является «медленной» и т. Д.

В моей схематической таблице ссылок содержатся как ссылки, так и обратные ссылки. Достаточно ли этого для ваших нужд?

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