Хм ... Много?
data.php
будет огромным, поэтому чтение файла займет много времени из-за дискового ввода-вывода. Тогда он должен оставаться в памяти, поэтому даже если у вас нет ограничений памяти, это повлияет на производительность.
Еще одним узким местом является ограничение max_execution_time
. Скорее всего, вы делаете что-то не так, если вам требуется 1 ГБ данных в памяти ... Рассматривали ли вы хранение необработанных (дополненных) данных, по одному элементу на каждую строку, а затем просто запросите некоторые конкретные байты этого файла?
Пример (запись):
$values = array
(
0 => '127.0.0.1', // 9 chars
1 => '127.0.0.2', // 9 chars
2 => '...', // 3 chars
3 => '255.255.255.255', // 15 chars - this is the max in our set
);
foreach ($values as $key => $value)
{
// lets pad each value to 15 bytes
$values[$key] = str_pad($value, 15, ' ', STR_PAD_LEFT);
}
file_put_contents('./test.data', implode('', $values), LOCK_EX);
Пример (чтение):
echo ltrim(file_get_contents('./test.data', false, null, 0 * 15, 15)); // 127.0.0.1
echo '<hr />';
echo ltrim(file_get_contents('./test.data', false, null, 1 * 15, 15)); // 127.0.0.2
echo '<hr />';
echo ltrim(file_get_contents('./test.data', false, null, 2 * 15, 15)); // ...
echo '<hr />';
echo ltrim(file_get_contents('./test.data', false, null, 3 * 15, 15)); // 255.255.255.255