REMO
Guest
Открытие фаила и исключительная блокировка.
Есть скрипт, который достаточно часто запускается в сутки (около 60к раз, причем в пиковые часы до 10к раз)... Он дергает БД, причем в запросе используется ORDER BY RAND() LIMIT 8. Как я понимаю, это не есть хорошо.
Поэтому решил сделать скрипт, который будет как бы кэшировть данные минут на 5, записывая результат запроса в фаил. А сам скрипт, к которому часто обращаются, будет читать эти данные из фаила и не дергать БД.
Как сделать, чтобы не возникло путаницы с чтением-письмом в фаил? Можно ставить исключительную блокироку, но прочитав на форуме, про ужасы, которые описывают люди, используя ее (фаил залочивается и не разлочивается, сбои в работе и т.д.), решил от нее отказаться.
Выход: создаю два фаила. Когда есть первый читаем из первого, когда есть второй, читаем из второго.
Соответственно есть скрипт, который генерит эти два фаила. Если первый фаил уже есть, то генерим второй и удаляем первый.
Допустим есть первый фаил, когда мы будем создавать второй фаил, то возникнет момент, когда будет существовать 2 фаила, что недопустимо. Как это разрешить?
Может есть иные пути решения проблемы?
P.s. сорри, что так длинно
Есть скрипт, который достаточно часто запускается в сутки (около 60к раз, причем в пиковые часы до 10к раз)... Он дергает БД, причем в запросе используется ORDER BY RAND() LIMIT 8. Как я понимаю, это не есть хорошо.
Поэтому решил сделать скрипт, который будет как бы кэшировть данные минут на 5, записывая результат запроса в фаил. А сам скрипт, к которому часто обращаются, будет читать эти данные из фаила и не дергать БД.
Как сделать, чтобы не возникло путаницы с чтением-письмом в фаил? Можно ставить исключительную блокироку, но прочитав на форуме, про ужасы, которые описывают люди, используя ее (фаил залочивается и не разлочивается, сбои в работе и т.д.), решил от нее отказаться.
Выход: создаю два фаила. Когда есть первый читаем из первого, когда есть второй, читаем из второго.
Соответственно есть скрипт, который генерит эти два фаила. Если первый фаил уже есть, то генерим второй и удаляем первый.
Допустим есть первый фаил, когда мы будем создавать второй фаил, то возникнет момент, когда будет существовать 2 фаила, что недопустимо. Как это разрешить?
Может есть иные пути решения проблемы?
P.s. сорри, что так длинно