Возможно, необходимо предварительно обработать файлы, таким образом, каждая запись находится в отдельном файле (или по крайней мере что каждый файл является mmap-способным размером).
Также Вы могли сделать все шаги обработки для каждой записи, прежде, чем перейти на следующую? Возможно, это избежало бы некоторых IO наверху?
Я бы использовал и использую для этого одноэлементный шаблон. Я использую класс, который я просто назову здесь Database_Manager:
class Database_Manager
{
private static $instance;
private $db_connection;
public static function getInstance()
{
if (self::$instance == null) {
$className = __CLASS__;
self::$instance = new $className();
}
return self::$instance;
}
public static function initializeConnection($connectionInfo)
{
$db = self::getInstance();
//call init functions.. connect to db, etc
//save connection to $db->db_connection;
}
public static function getDb()
{
$db = self::getInstance();
return $db->db_connection;
}
}
Вы можете настроить все один раз с помощью вызова initializeConnection (), а затем просто вызвать Database_Manager :: getDb () с этого момента.
Хорошая вещь об этом подходе заключается в том, что он легко модифицируется для управления подключениями к нескольким базам данных, и вы гарантированно будете иметь только одно открытое соединение для каждой базы данных.
Обратите внимание, что я упустил некоторые мелкие детали реализации Singleton, такие как как объявление функции __construct () частной (большая часть того, что указано выше, скопировано из памяти). Я просто хотел показать общий подход.
Я думаю, что Singleton будет работать хорошо для того, что вы пытаетесь сделать. В противном случае вы ограничены использованием ключевого слова global, которое, как вы уже выяснили, является чрезвычайно дорогостоящим.