Теорема показывает, что при разделении системы пропадает либо согласованность данных, либо их готовность.



CAP–теорема была математически доказана. Но она не запрещает создание распределенных систем, устойчивых к разделению, которые обеспечивают высокий уровень готовности и согласованности данных. Теорема является ограниченной, т.к.:

1) она доказана для очень частного случая разделения системы;

2) система живет во времени, и существуют длительности интервалов, когда в системе обеспечивается либо готовность, либо согласованность. Если эти интервалы достаточно малы, то достаточно отложить выдачу ответа до следующего состояния готовности или согласованности.

 

Распределенные файловые хранилища, в отличие от распределенных баз данных, получили большее распространение ввиду того, что в файловых хранилищах нет проблемы с согласованностью, т.к. данные не имеют внутренней структуры, не обладают ссылочной целостностью.

Решение проблемы согласованности для БД привело к созданию систем БД, в которых не обеспечивается распределенная транзакционность, но обеспечивается высокая готовность (хранилище пар вида «ключ – значение»).

Уровни изоляции и проблемы, которые возникают в базах данных

 

Основныеуровниизоляции:

1) serializable – упорядочиваниевсехтранзакций;

2) repeatableread – обеспечение повторного чтения;

3) readcommitted – обеспечение чтения подтвержденных данных;

4) readuncommitted – чтение всех данных, включая неподтвержденные, т.е. беспорядочное чтение.

 

Уровни изоляции введены, чтобы решить определенные проблемы.

Пусть есть таблица.

id name age
1 Joe 20
2 Jill 25

 

Рассмотрим проблемы баз данных на примере работы с указанной таблицей.

1) грязное чтение

Транзакция 1 Транзакция 2
  SELECT age FROM users WHERE id = 1;    
    UPDATE users SET age = 21 WHERE id = 1;  
  SELECT age FROM users WHERE id = 1;    
    ROLLBACK;  

 

2) неповторяющееся чтение

Транзакция 1 Транзакция 2
  SELECT * FROM users WHERE id = 1;    
    UPDATE users SET age = 21 WHERE id = 1; COMMIT;  
  SELECT * FROM users WHERE id = 1; COMMIT;    

 

3) фантомное чтение

Транзакция 1 Транзакция 2
  SELECT * FROM users WHERE age BETWEEN 10 AND 30;    
    INSERT INTO users VALUES ( 3, 'Bob', 27 ); COMMIT;  
  SELECT * FROM users WHERE age BETWEEN 10 AND 30;    

 

Уровень изоляции Грязное чтение Неповторяющееся чтение Фантомное чтение
Read Uncommitted Возможно Возможно Возможно
Read Committed - Возможно Возможно
Repeatable Read - - Возможно
Serializable - - -

 

Работа БД в режиме Serializable требует не только блокировок на запись и чтение данных, но и на диапазоны данных, сложна в реализации и неэффективна при работе.

Есть различные подходы, чтобы обеспечить эти уровни изоляции:

1) Использование блокировок;

2) MVCC (MultiVersionConcurrencyControl) – управление конкурентным доступом с помощью многоверсионности. Каждый элемент данных представляет собой ссылку на список; изменение данных происходит следующим образом: когда происходит начало транзакции, запоминается время t1(с точностью до тиков процессора), и это значение используется для отсечения по времени новых изменений. Если для объекта приходит обновление, то происходит засечка времени (t2). Если приходит запрос, то есть временной срез t1, который является параметром любого запроса. Получается, мы не видим последних изменений. Этот подход требует синхронизации транзакций по времени. Для этого используются системные часы и единый механизм выдачи времени. Этот подход работает в системе, расположенной на одном сервере. Иначе возникает проблема синхронизации времени на нескольких серверах.


Дата добавления: 2018-08-06; просмотров: 248; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!