Есть ли способ хранения данных базы данных в PHP во время работы сервера? - PullRequest
1 голос
/ 29 января 2012

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

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

Мой вопрос таков: вместо того, чтобы писать другую, отдельную программу и использовать PHP дляподключаться к нему с каждым запросом, могу ли я вместо этого сохранить все дерево данных в памяти только с помощью PHP?Таким образом, любой сеанс, любой запрос будет просто читать из памяти, а не перечитывать базу данных и перестраивать дерево снова и снова.

Ответы [ 3 ]

4 голосов
/ 29 января 2012

Я бы посмотрел на запуск экземпляра memcached на вашем сервере. http://www.memcached.org.

Вы должны иметь возможность хранить скомпилированное дерево данных в памяти и извлекать его для использования в PHP. Вам нужно будет загрузить его в PHP, чтобы выполнить поиск, а также спроектировать способ обновления дерева в memcached при изменении базы данных (при условии, что список слов может быть обновлен, поскольку нет веской причины для этого). в противном случае сохраните в базе данных).

0 голосов
/ 29 января 2012

PHP действительно не очень хороший язык для больших структур памяти.Это просто не очень эффективно для памяти и имеет проблему с постоянством, о чем вы спрашиваете.Обычно в PHP люди хранят данные в каком-то внешнем постоянном хранилище данных, оптимизированном для быстрого извлечения.

Обычно люди используют двоякий подход:

1) Храните данные в базе данных какмаксимально оптимизирован для стандартных запросов

2) Кэшировать результаты дорогостоящих запросов в memcached

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

0 голосов
/ 29 января 2012

Могу ли я предложить посмотреть на тип таблицы памяти в mysql: http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

После этого вы все равно сможете использовать функции поиска mysql для быстрых данных в памяти.

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