он использует слишком много ресурсов
Какой ресурс? (ЦП? Память? Пропускная способность сети? Нагрузка ввода-вывода на сервере базы данных?)
while (true) {
$result=mysql_query("SELECT route_id, next_stop FROM db_stop_times WHERE stop_id = $activeNode", $connection);
Если я правильно понял, вы выполняете вызов базы данных для каждого узла в каждой попытке поиска пути. Каждый из этих вызовов будет блокироваться на время ожидания ответа от базы данных. Даже если у вас быстрая база данных, это займет пару миллисекунд (если база данных не работает на том же сервере, что и ваш код). Поэтому я рискну предположить, что большая часть вашего времени выполнения тратится на ожидание ответов из базы данных.
Кроме того, если в вашей базе данных отсутствуют правильные индексы, каждый запрос может выполнить полное сканирование таблицы ...
Решение простое: загрузите db_stop_times в память при запуске приложения и используйте это представление в памяти при разрешении соседних узлов.
Редактировать: Да, индекс для stop_id будет правильным индексом для этого запроса. Что касается практического кэширования, я не знаю PHP, но с чем-то вроде Java (или C #, или C ++, или даже C) я бы использовал представление в форме
class Node {
Link[] links;
}
class Link {
int time;
Node destination;
}
это будет немного быстрее, чем memcached, но предполагает, что вы можете удобно разместить всю таблицу в основной памяти. Если вы не можете этого сделать, я бы использовал систему кэширования, такую как memcached.