В настоящее время я вставляю IP-адрес каждого посетителя в БД.
insert into visitor(IP) values($ipaddress)
Если одновременно находится около 50 посетителей, загрузка ЦП становится высокой. Однако есть и другой способ записать IP посетителя, добавив его в какой-нибудь файл TXT.
fwrite($file,$ip);
Если fwrite to file работает лучше, чем вставка в DB, я сделаю это.
Основным фактором здесь является структура данных, независимо от того, будут ли операции записи и чтения последовательными или случайными. Добавление к файлу может быть даже быстрее в некоторых ситуациях, чем использование удаленного сервера базы данных (при условии, что у вас быстрая файловая система), но это, безусловно, изменит момент, когда вы попытаетесь вставить строку в содержимое файла вместо ее добавления. То же самое и для чтения: если вы всегда читаете весь контент, тогда файл может быть быстрее, если у вас нет накладных расходов на синтаксический анализ, во всех других ситуациях база данных будет явным победителем.
@arkascha, когда я в последний раз тестировал, запись небольшого количества данных в файл происходит быстрее, чем установка соединения с базой данных MySQL, даже если она локальная. Не обращайте внимания на фактическую операцию записи. Пока вы не столкнетесь с проблемами блокировки, запись файла будет медленной.
@AbhiBeckert Следует отметить два момента: 1. Это не противоречит тому, что я сказал выше: проблема с использованием простых файлов в качестве хранилища данных заключается не в фактическом открытии, а в обработке данных. Это может быть тривиально, если оно выполняется последовательно и синтаксический анализатор не требуется, но становится сложным и требует много времени, поскольку вам нужно анализировать, обрабатывать, повторно собирать и записывать весь файл для каждой операции, очевидно, тогда такие решения не работают. И 2. открывается соединение с сервером базы данных однажды, обычно оно постоянное ...
Поподробнее, пожалуйста. Это через веб-сервер? Через PHP? Через прямой вход в MySQL? Доступен ли IP-адрес в веб-журнале? Система мониторинга TCP? Другой? Тебя не интересуют дупсы? Хотите считать дубли? И т. Д. И т. Д. Сколько вставок в минуту в часы пик? Что вы будете делать с результатами - пригодится ли навороченный SELECT
? Можно ли иметь 24-часовую задержку перед считыванием данных? Если нет, то какая-то более короткая задержка? Я считаю, что для разных ситуаций есть разные решения.
В условиях низкой загруженности fwrite()
работает намного быстрее, поскольку это более простой процесс.
В условиях высокого трафика правильно настроенная таблица базы данных будет более эффективно обрабатывать одновременные записи и обеспечивать лучшую производительность.
В зависимости от вашего сервера у вас могут быть некоторые сбои с fwrite () при высокой нагрузке - обязательно посмотрите, как работает блокировка, и различные флаги fopen ().
Если вы выбираете вариант с базой данных, изучите варианты хранения и индексации, а также insert ignore
. Все это значительно повлияет на производительность.
Оценить это ...?