[identity profile] tankmaster.livejournal.com posting in [community profile] useless_faq
Предположим такую ситуацию: некто запостил в [livejournal.com profile] useless_faq вопрос, который не отвечает правилам сообщества, но его ещё не удалили модераторы. У человека, который загружает этот пост, чтобы посмотреть комменты, медленный интернет, и страница загружается медленно. И вот у него загрузилось полстраницы, и продолжает открываться, и в этот момент модератор с быстрым интернетом удалит этот пост, т.к. он не отвечает правилам сообсчества. Вопрос - у человека, который загружает страничку с постом, эта страничка всё-таки дозагрузится, даже когда её удалит модератор, или напишет какую-то ошибку а-ля "Не могу догрузить до конца эту страницу, т.к. такой записи уже нет"?

Date: 2006-05-25 10:39 am (UTC)
From: [identity profile] ram-scanner.livejournal.com
Догрузится.

Date: 2006-05-25 10:45 am (UTC)
From: [identity profile] heavywave.livejournal.com
Удаляецо. Но если страницу запросили, то сервер её передаст и дело уже в скорости клиента. А существует она уже или нет выяснится при следующем запросе, т.е. если пользователь решит перегрузить страницу.

Date: 2006-05-25 10:43 am (UTC)
From: [identity profile] heavywave.livejournal.com
Догрузится. Почему долго объяснять :)))

Date: 2006-05-25 10:45 am (UTC)
From: [identity profile] sxakludant.livejournal.com
не знаю как именно здесь, но вообще я программер баз данных
Там есть такое понятия как транзакция в том числе транзакция чтения
так вот - загрузка страницы должна происходить за 1 транзакцию чтения
Это означает, что все чтения будут такими как если бы они происходили в 1 момент

Date: 2006-05-25 10:46 am (UTC)
From: [identity profile] sxakludant.livejournal.com
(единственное что в таком случае возможно - snapshot too old что произойдет в таком случае при загрузке сайта мне неизвестно возможно будет ошибка... Но snapshot too old это такая ошибка которая за секунды или минуты не возникает)

Date: 2006-05-25 10:46 am (UTC)
From: [identity profile] madr1d.livejournal.com
ну подумайте, как может догрузиться то, что уже удалили?

Date: 2006-05-25 10:47 am (UTC)
From: [identity profile] sxakludant.livejournal.com
объясняю как - это берется из роллбек-сегмента. Оттуда все не сразу удаляется

Date: 2006-05-25 10:51 am (UTC)
From: [identity profile] madr1d.livejournal.com
все, понял, фигню я сказал :)

Date: 2006-05-25 10:56 am (UTC)
From: [identity profile] sxakludant.livejournal.com
ороче ето делаеццо примено так:
удаление само процесс из 2х действий
1. собственно удаление - при нем данные реально удаляются из таблицы, но перед этим заносятся в роллбек-сегмент , в таблице каежтся остается ссылка на то что тут есть еще запись
если даже быстро запросить в эжтот момент таблицу (пока не произошла стадия 2 - коммит, любой селект из другой сессии поймет что данные не закоммичены и возьмет данные из рб сегмента)
2. коммит - место в рб сегменте освобождается для след транзакций
если щас запросить селект, то он уже ответит что етой записи нет

А вот если запросить любой селект до коммита то он знает, что он должен вернуть данные по состоянию на "до коммита" по ид транзакции он опеделяет что ему все-таки дажен после коммита надо лезть в рб сегмент
А вот если к етому моменту эта часть рб сегмента будет уже занята другой транзакцией - будет snapshot too old

это все разумеется толькопримерно

Date: 2006-05-25 11:06 am (UTC)
From: [identity profile] sxakludant.livejournal.com
(и разумеется вместо етпа 2 - коммит может произойти другое - роллбек Тогда все данные вернутся из роллбек-сегмента обратно в таблицу так как будто они всегда там были)

Date: 2006-05-25 11:11 am (UTC)
From: [identity profile] aborigen095.livejournal.com
Какой глубоко диалектический вопрос...

Date: 2006-05-25 11:14 am (UTC)
From: [identity profile] meeshootkin.livejournal.com
Сначала вычитываются данные из БД, потом уже формируется ответ клиенту (так в идеале должно быть, я думаю в жж так).
Поэтому будет так:
1. Клиент посылает запрос.
2. Сервер вычитывает данные из БД и формирует ответ.
3. Сервер начинает передачу ответа.
4. Клиент начинает прием ответа.
5. Админ посылает запрос на удаление поста.
6. Данные удалены, формируется ответ админу.
7. Передача и прием админу.
8. Конец приема для клиента.
Итак, если 5 пункт произошел после 2-го, то юзер получит страницу, иначе - нет.
Порядок остальных действий клиента по отношению к админу и наоборот несущественен.

Date: 2006-05-25 11:16 am (UTC)
From: [identity profile] sxakludant.livejournal.com
даже если 5 будет в середине между разными частями 2 юзер страницу должен получить:-)

Date: 2006-05-25 11:29 am (UTC)
From: [identity profile] meeshootkin.livejournal.com
Все вышеприведенные действия считаются атомарными.

Date: 2006-05-25 11:31 am (UTC)
From: [identity profile] meeshootkin.livejournal.com
Собственно говоря, вы об этом и написали выше.

Date: 2006-05-25 11:33 am (UTC)
From: [identity profile] sxakludant.livejournal.com
да, облажался я там забыл конечно что скорость загрузки страницы у юзера имеет слабое отношение к скорости формирования страницы:-) Но тем не менее:-)

Date: 2006-05-25 03:40 pm (UTC)
From: [identity profile] ram-scanner.livejournal.com
Если говорить о "тем не менее" то есть механизм транзакций и блокировок. Поэтому пользователь или не получит страницы вообще, или она будет правильно сгенерирована и пользователь получит ее полностью. Если исключить конечно ситуацию когда у всех разработчиков движка сайта руки растут из джопы, которая к тому-же стоит вместо головы =)