netwind: Видимо, это вы о ситуации когда два процесса внезапно и одновременно решают обновить кеш.
Конечно, они поочередно отработают с flock, но ведь это же кеш. Там информация будет отличаться ненамного. По сравнению с общей сложностью flock, для вебсайтов я бы все равно выбрал бы rename.
Не, я не про кэш, у меня в файл пишутся статистические данные, неплохо бы, чтобы они были точными.
netwind: Отсутствие синхронизации всегда быстрее. Неужели не очевидно.
Но при этом при нагрузках всё выше вероятность проблем с потерей данных. Причем, эта вероятность не исчезает полностью - сбой может произойти и при маленькой нагрузке. Не слишком ли дорого обходятся эти микросекунды? Да и не очевидно, если честно.
raspberry: было ли у вас такое: написали пост с претензиями к какой-то компании (продукту, услуге, etc), в комментарии пришли представители этой компании и что-то ответили?
netwind, не вспомнил, но подумал сейчас, и вижу одну проблему: c rename теоретически может случиться так, что более старые данные перезапишут более новые. Чтобы этого не происходило, надо блокировать файл, но тогда уже и raname вроде ни к чему :) Возможно, я не прав, тогда объясните почему.
BrokenBrake добавил 03.11.2009 в 19:35
Вообще, если честно, я удивлён, что нужны эти блокировки. Я раньше почему-то был уверен, что PHP должен сам понимать, что если мы пишем файл, не нужно допускать ситуаций с его чтением в тот же момент. То есть я всерьез считал, что эти все блокировки делаются автоматически. И вот, ошибся. Но почему так?
Кто нибудь может сказать, для чего может понадобиться специально чтение/запись без блокировок?
DeveloperRu: насколько я изучил документацию, можно использовать LOCK_EX в int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
Описано это так:
LOCK_EX Acquire an exclusive lock on the file while proceeding to the writing.
stack, для моих целей вообще не подойдёт, так как продукт должен ставиться пользователем с минимальной подготовкой на максимальное количество всевозможных серверов. Думаю, Memcached не везде есть.
Видимо, это вы о ситуации когда два процесса внезапно и одновременно решают обновить кеш.
Конечно, они поочередно отработают с flock, но ведь это же кеш. Там информация будет отличаться ненамного. По сравнению с общей сложностью flock, для вебсайтов я бы все равно выбрал бы rename.
Не, я не про кэш, у меня в файл пишутся статистические данные, неплохо бы, чтобы они были точными.
Отсутствие синхронизации всегда быстрее. Неужели не очевидно.
Но при этом при нагрузках всё выше вероятность проблем с потерей данных. Причем, эта вероятность не исчезает полностью - сбой может произойти и при маленькой нагрузке. Не слишком ли дорого обходятся эти микросекунды? Да и не очевидно, если честно.
ewg777, любая БД так работает, насколько мне известно, но причём здесь базы в этой теме? :)
Как страшно жить :)
Что может быть ужаснее смерти близкого человека?
Не знаю, зачем такая тема и кому интересно чужое горе.
Тусуются приимущественно в местах, где пища остается..бывает даже по штук 30 в одном месте.
А убирать за собой не пробовали?
было ли у вас такое: написали пост с претензиями к какой-то компании (продукту, услуге, etc), в комментарии пришли представители этой компании и что-то ответили?
Написал маленько негатива про LendMoney, пришёл Захар Боул.
Написал про А1, пришли представители.
2 случая, только толка нет никакого — ничего не меняется.
Raspberry, а у вас просто любопытство, или готовите что-то?
netwind, не вспомнил, но подумал сейчас, и вижу одну проблему: c rename теоретически может случиться так, что более старые данные перезапишут более новые. Чтобы этого не происходило, надо блокировать файл, но тогда уже и raname вроде ни к чему :) Возможно, я не прав, тогда объясните почему.
BrokenBrake добавил 03.11.2009 в 19:35
Вообще, если честно, я удивлён, что нужны эти блокировки. Я раньше почему-то был уверен, что PHP должен сам понимать, что если мы пишем файл, не нужно допускать ситуаций с его чтением в тот же момент. То есть я всерьез считал, что эти все блокировки делаются автоматически. И вот, ошибся. Но почему так?
Кто нибудь может сказать, для чего может понадобиться специально чтение/запись без блокировок?
ewg777, спасибо! Зря я значит переделывал свой код с одной удобной строчки на несколько неудобных.
насколько я изучил документацию, можно использовать LOCK_EX в int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
Описано это так:
LOCK_EX Acquire an exclusive lock on the file while proceeding to the writing.
А где именно про это написано? Я читал здесь - http://docs.php.net/manual/ru/function.file-put-contents.php
Там есть параметр resource $context, но ничего не говорится, что в качестве этого параметра может быть блокировка файлов.
слушайте netwind'а )
у флока минусов по-больше, чем с временным файлом и переименовыванием)
Ну блин. Это же техническая тема. Неужели так трудно перечислить эти минусы, если вы знаете о них? Давайте обсудим.
stack, для моих целей вообще не подойдёт, так как продукт должен ставиться пользователем с минимальной подготовкой на максимальное количество всевозможных серверов. Думаю, Memcached не везде есть.