Большие массивы PHP или таблицы временной памяти MySQL? - PullRequest
3 голосов
/ 14 июня 2010

Как бы вы временно хранили несколько тысяч пар key => value или key => array в одном процессе. Поиск по key будет выполняться непрерывно в процессе, и данные будут отброшены после завершения процесса.

Должен ли я использовать массивы? временные таблицы MySQL? Или что-то среднее?

Ответы [ 6 ]

6 голосов
/ 14 июня 2010

Это зависит от того, сколько означает несколько тысяч и насколько большой массив занимает в памяти. Если вы можете справиться с этим в PHP, вы должны это сделать, потому что использование mysql создает здесь небольшие издержки.

Но если вы находитесь на общем хосте или у вас есть ограничение memory_limit в php.ini и вы не можете увеличить его, вы можете использовать временную таблицу в MySQL.

Также вы можете использовать простое и быстрое хранилище значений ключей, такое как Memcached или Redis , они также могут работать только в памяти и иметь очень быстрый поиск ключей (обещания Redis) Сложность времени O (1) )

4 голосов
/ 14 июня 2010

Несколько тысяч ?!Вы имеете в виду, что это может занять несколько килобайт?!

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

2 голосов
/ 14 июня 2010

Memcached - это популярный способ кэширования данных.

Если вы запускаете только один процесс и вам не нужно беспокоиться о параллельном доступе, я бы сделал это внутри php.Если у вас несколько процессов, я бы использовал какое-то установленное решение, поэтому вам не нужно беспокоиться о деталях.

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

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

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

  • Если ваши данные уже находятся в PHP, вам, вероятно, лучше сохранить их там. Хотя обработка данных в PHP довольно интенсивна

1 голос
/ 14 июня 2010

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

Масштабируемость также является проблемой. Так лучше делать на PHP.

0 голосов
/ 14 июня 2010
  • Если поиск данных будет выполнен только с несколькими запросами, сделайте это с временной таблицей mysql.

  • Если будет много поисков данных, почти всегда лучше хранить их на стороне php. (накладные расходы на соединение)

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