|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.12.2021, 14:41 | #1 |
Новичок
Джуниор
Регистрация: 14.12.2021
Сообщений: 2
|
Задача на транзакции
Добрый день, есть такая задача со степика, ломаю голову уже долгое время. Находится она на курсе Погружение в СУБД.
Сейчас напишу смысл задачи: Для успешного решения задачи необходимо, разумеется, понимать, как работают транзакции на разных уровнях изоляции и вспомнить основы теории вероятностей, а именно определение математического ожидания дискретной случайной величины. И быть очень внимательным. Итак, задача. Алиса хочет последовательно выполнить N транзакций вида SQL Выделить код BEGIN ISOLATION LEVEL READ COMMITTED; SELECT VALUE FROM T WHERE id = 2 FOR UPDATE; SELECT VALUE FROM T WHERE id = 3 FOR UPDATE; SELECT VALUE FROM T WHERE id = 4 FOR UPDATE; SELECT VALUE FROM T WHERE id = 1 FOR UPDATE; UPDATE T SET VALUE = VALUE + 10 WHERE id BETWEEN 1 AND 4; COMMIT; Если транзакция по каким-либо причинам обрывается, то Алиса немедленно повторяет её заново и делает так до тех пор, пока транзакция не закончится успешным подтверждением. Одновременно с транзакцией Алисы с вероятностью p запускается транзакция Болванщика, которая выглядит так: SQL Выделить код BEGIN ISOLATION LEVEL READ COMMITTED; SELECT VALUE FROM T WHERE id = 1 FOR UPDATE; SELECT inc INTO _inc FROM R WHERE id = 1; UPDATE T SET VALUE = VALUE + _inc WHERE id=1; COMMIT; Транзакции Алисы и Болванщика выполняются параллельно на разных процессорах, без каких-либо не указанных в задаче задержек и накладных расходов. В нашей воображаемой базе данных каждый оператор SELECT FOR UPDATE выполняется за 2 миллисекунды, простой оператор SELECT выполняется за 1 миллисекунду, а оператор UPDATE выполняется за 10 миллисекунд. Если оператор ждет получения блокировки, то мы считаем, что он начинает выполняться с момента её получения. Если оператор по каким-то причинам оборвался, то время выполнения конкретно этого оператора мы считаем равным нулю. Все использующиеся таблицы и записи в нашей БД есть. Алиса заметила, что Болванщик запускает свои транзакции не так уж и часто, и ей пришла в голову мысль о том, что замена уровня изоляции в её транзакции на REPEATABLE READ и всех операторов SELECT FOR UPDATE в её транзакции на простые SELECT несколько уменьшит время выполнения её транзакции, что для неё важно. Кроме того, у неё есть договорённость с Болванщиком о том, что если Алиса повторяет оборвавшуюся транзакцию, то в то время, пока она повторяется, Болванщик гарантированно ничего не будет делать. Болванщик может сообщить Алисе значение вероятности p. Подскажите Алисе, при каких p имеет смысл воспользоваться уровнем REPEATABLE READ. Запись ответа В ответе должен быть записан интервал значений p, при которых матожидание времени, прошедшего от начала до успешного подтверждения транзакции Алисы с уровнем изоляции REPEATABLE READ будет строго меньше матожидания времени от начала до успешного выполнения транзакции с уровнем изоляции READ COMMITTED. Интервал должен быть записан в виде (полу)открытого или закрытого отрезка. Границы отрезка должны быть целыми числами или несократимыми рациональными дробями. Границы должны быть отделены друг от друга запятой. Если значение границы входит в отрезок (то есть если он с этой стороны закрытый) то скобка должна быть квадратной, а если не входит, то круглой. Пробелов в ответе быть не должно. Примеры валидных ответов: -- от нуля до единицы включительно [0,1] -- от нуля до единицы не включая 0 и 1 (0,1) [1/2,1) (1/3,2] Примеры невалидных ответов: -- пробел после запятой [0, 1] -- скобки не круглые и не квадратные {0,1} -- не рациональное число [0.5,1) -- дробь сократимая (2/6,2] В задаче необходимо указать интервалы. Есть комментарий, который описывает формулу нахождения числа p: "Рассчитываете время подтверждения транзакции Алисы в случае, если Болванщик не запускал скрипт (R1 и C1 для REPEATABLE READ и READ COMMITTED соотвественно) и в случае, если Болванщик запустил свой скрипт (аналогично R2 и C2). Полученные значения вставить в формулу C1 * (1 - p) + C2 * p = R1 * (1 - p) + R2 * p". Как найти эти коэффициенты C1, C2, R1, R2 C1 * (1 - p) + C2 * p = R1 * (1 - p) + R2 * p как найти коэффициенты C1 и C2, R1 и R2 ? |
14.12.2021, 16:34 | #2 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,597
|
Откуда скопировали и зачем?
Вам задали решать, вот и решайте, в чём проблема собсвенно? Не можете решить не решайте, идит дворником работать в Москве дефицит кадров при хорошей зарплате. |
14.12.2021, 17:02 | #3 |
Новичок
Джуниор
Регистрация: 14.12.2021
Сообщений: 2
|
На степике, там же написано.
Проблема в том, что не понятно как решать, для этого и обратился за помощью на форум. Не можете помочь в решении, не отвечайте) |
14.12.2021, 17:25 | #4 | |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,597
|
Девушка что ли? тогда может и зря предложил в дворники.
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вложенные транзакции | tae1980 | SQL, базы данных | 12 | 16.03.2018 21:22 |
транзакции | sem_1989 | SQL, базы данных | 1 | 23.09.2011 22:43 |
транзакции | пауэрлифтинг | БД в Delphi | 0 | 27.05.2010 02:24 |
Транзакции в DLL | acidlord | БД в Delphi | 0 | 28.11.2009 13:31 |
Транзакции и try | nikmay | Общие вопросы Delphi | 1 | 30.07.2009 21:13 |