2012-06-01 3 views
0

Я искал несколько часов, но ничего не нашел по этому вопросу.mysql_data_seek по сравнению с хранением данных в массиве

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

Сначала я начал использовать mysql_data_seek, чтобы выполнить запрос, но я начал терять производительность. В связи с этим я попытался обменять mysql_data_seek на перенос данных в массив и запуск цикла foreach.

Исполнение не улучшилось каким-либо образом, я мог бы измерить, поэтому я начал задаваться вопросом, что является, по сути, лучшим вариантом. Построение довольно большого массива данных, выполняющего несколько раз mysql_fetch_array.

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

Есть ли предпочтительный способ выполнения этой задачи? Есть ли другой вариант помимо mysql_data_seek или данных большого массива? У кого-нибудь есть информация о тестировании этих вариантов?

Большое спасибо за ваше время.

+0

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

ответ

1

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

Таким образом, вы можете доверять своей базе данных, чтобы делать то, что она делает хорошо: запрашивать и извлекать данные и помогать им, убедившись, что в таблице мало споров и/или размещения соответствующих indexes. Это, в свою очередь, может изменить производительность записей, которые могут быть неважными в вашем случае, только вы действительно можете это судить. (индексы должны быть рассчитаны и сохранены).

Расширение PHP вы используете, будет играть роль, а также, если скорость сущности: «обновить», чтобы mysqli или pdo и сделать ->fetch_all(), так как это сократит связь между процессом PHP и сервер базы данных. Единственная причина этого в том, что объем данных, которые вы запрашиваете, настолько огромен, что он останавливает или забивает ваши процессы php/webserver или даже весь ваш сервер, заставляя его заменять.

Тип таблицы, который вы используете, может иметь значение, некоторые типы запросов, похоже, работают быстрее на MYISAM, в отличие от INNODB. Если вы хотите немного переделать, вы можете сохранить эти данные (или их копию) в mysql's HEAP engine, так что просто в памяти. Вам нужно быть осторожным, чтобы синхронизировать его с отключенным при записи, но если вы хотите сохранить измененные данные точно. (только в случае сбоя или выключения сервера)

Вы также можете кэшировать свои данные примерно в memcache или с помощью apc_store, что должно быть очень быстрым, так как оно находится в памяти процесса php. Большая проблема заключается в том, что APC, как правило, имеет меньше памяти, доступной для хранения (по умолчанию 32MB). Большая популярность Memcache заключается в том, что, хотя он все еще быстрый, он распространяется, поэтому, если у вас есть несколько серверов, они могут делиться этими данными.

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

И, наконец, вы можете жестко задавать свои значения в своем php-скрипте, не забудьте по-прежнему использовать что-то вроде eaccelerator или APC и убедитесь, что вам действительно нужно использовать их 4 раза или, если вы не можете просто кэшировать вывод чего бы то ни было вы на самом деле создаете его.

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

+0

Спасибо за быстрый ответ. Я хотел бы скомпилировать запросы в php-скрипты, как вы упомянули, но, к сожалению, мне понадобилось бы много времени, чтобы он работал так же аккуратно и динамично, как сейчас. Я, безусловно, рассмотрю некоторые моменты, которые вы сделали. Я так благодарен. Спасибо. –

Смежные вопросы