Тоже мучался подобной проблемой — однако так и не нашел красивого решения. Статический метод — не слишком хорошо, комментарии — тоже, instanceof засоряет код. Остановился на комментариях как предложил .
public static function getMongoDb ()
{
static $mongodb, $mongo;
if ($mongodb === null) {
$mongo = new \Mongo (MONGO_SERVER);
$mongodb = $mongo->selectDB (MONGO_DATABASE);
}
return $mongodb;
}
Да, при выборе коллекции по прежнему выполняется соединение с mongo, однако если нигде на странице Mongo не используется — объекты для работы с ним так и не будут созданы.
Под синхронизацией вы подразумеваете копирование — ибо сейчас она у вас осуществляется только в одну сторону — от удаленного сервака к вашему.
Можно вместо rsync использовать mysqldump, потом gzip, scp на удаленном сервере и mysql < dump.sql на локальном — будет то же самое, но удаленный сервер простаивать почти не будет (останется только лаг на время выполнения дампа).