Скорость записи в текстовый файл или через базу данных ключ / значение - PullRequest
0 голосов
/ 13 октября 2011

Я тестировал запись в текстовый файл просто с помощью команды оболочки или php. Используя цикл while для 1 миллиона циклов, добавляем номер цикла в файл (как $ i \ n). Я подумал, что это самый быстрый способ хранения данных на диске. Где в shell или php, это заняло около 40 секунд на 1 миллион записей.

В качестве альтернативы я использовал быстрые базы данных ключ / значение, такие как QDBM, GDBM и т. Д. Общее время было еще меньше (15-30 с). Каково теоретическое объяснение более быстрого хранения данных через простые системы баз данных? Я думал, что ограничение скорости должно быть аппаратным (например, скорость жесткого диска или процессора).

Другой вопрос: при увеличении цикла со 100к до 1М общее время увеличивалось в 10 раз; но при увеличении с 1М до 10М это заняло в 100 раз больше времени. Какой порог замедляет работу системы?

1 Ответ

1 голос
/ 13 октября 2011

Узким местом для записи данных на диск обычно является дисковый ввод-вывод. Самый быстрый непрерывный вывод может быть достигнут при записи непрерывных блоков на диск (и).

Я предполагаю, что файл был открыт и закрыт 1 миллион раз в вашем сценарии оболочки. Каждое закрытие вызывает синхронизацию файла с диском, что, вероятно, вызывает ожидание (в зависимости от файловой системы и решения для хранилища).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...