4.1 Последователност относно Brewera

Да започнем с това, че Ерик Брюър не е и никога не е твърдял, че е експерт по бази данни. Той принадлежи към общността на разпределените системи и известната му реч, в която се появява "теоремата" на CAP, беше изнесена на конференцията "Принципи на разпределените изчисления". (Между другото, десет години по-късно, през 2010 г., той отново изнесе поканен доклад на същата конференция и в този доклад даде по-специално редица примери за разпределени системи, чието развитие взе предвид " теорема" на CAP.) В тази област има собствена интерпретация на термините, използвани в областта на базите данни.

По-специално, терминът "незабавна последователност" означава, че след като потребителят получи известие от системата за успешното завършване на няHowва операция за актуализиране на данни, резултатът от тази операция става незабавно видим за всички наблюдатели.

Евентуалната последователност означава, че ако в системата не постъпят нови операции за актуализиране на данни за достатъчно дълъг период от време, тогава може да се очаква, че резултатите от всички предишни операции за актуализиране на данни в крайна сметка ще се разпространят до всички възли на системата и всички реплики на данни са последователен (очевидно това трябва да се разбира като "всички реплики ще имат едно и също състояние".

Имайки предвид това усещане за последователност, "теоремата" на Брюър може да се счита за доста разбираема и очевидна: във всяка разпределена система със споделени данни могат да бъдат едновременно осигурени само две свойства на последователност, достъпност и толерантност към разделяне на мрежата. В това отношение Брюър дори противопоставя набора от свойства на ACID с предложения от него набор от свойства BASE (основно наличен, меко състояние, възможна консистенция - наличност в повечето случаи; нестабилно състояние; крайна консистенция). Но това противопоставяне според мен е неоправдано, тъй като в първия случай говорим за логическите характеристики на транзакциите, а във втория - за физическите свойства на разпределените системи.

4.2 Доказателство на "теоремата"

Мнозина вярват, че "теоремата" на Брюър е официално доказана. Наистина, статията на Сет Гилбърт и Нанси Линч въвежда някои (почти) формални определения, в чийто контекст „теоремата“ наистина се превръща в теорема и се доказва. Нека обаче да видим How се определят тези три свойства на разпределена система, от които, според "теоремата" на Брюър, само две свойства могат да се поддържат едновременно.

Съгласуваността се нарича атомарна, or линеаризираща се консистенция (атомарна, or линеаризираща се консистенция), която е свойство на системата, всички индивидуални обекти с данни на която са атомарни (линеаризиращи). На свой ред, атомарният обект е обект с няколко операции, така че извикването на операцията и получаването на данни за отговор се случват сякаш моментално, т.е. обектът не приема извикването на следващата операция, докато предишната операция не е напълно завършена. Редът, в който се получават операциите, трябва да бъде такъв, че ако операция от тип четене пристигне след извършване на операция от тип запис, тогава операцията за четене трябва да върне стойността, записана от тази or някоя по-късна операция за запис.

Разпределената система е винаги достъпна, ако трябва да се отговори на всяка заявка, получена от възел без грешка. Устойчивостта на системата към разделяне на мрежата се моделира като запазване на жизнеспособността на системата в случай на загуба на произволен брой съобщения, изпратени от един възел до друг.

Въз основа на тези дефиниции Хилбърт и Линч формулират следната теорема (няма часовник в асинхронния мрежов модел и възлите трябва да вземат решения само въз основа на получени съобщения и локални изчисления):

В асинхронен мрежов модел не е възможно да се приложи обект на данни за четене/запис, който гарантира наличност и свойства на атомна последователност за всички валидни изпълнения (включително тези, които губят съобщения).

Тази теорема наистина е съвсем просто формално доказана чрез метода "от противно". Статията продължава със заключението, че:

В асинхронен мрежов модел не е възможно да се приложи обект с данни за четене/запис, който гарантира свойства за достъпност за всички валидни изпълнения и атомна последователност за валидни изпълнения, при които съобщенията не се губят.

В допълнение, истинността на основната теорема се доказва за частично синхронен мрежов модел, в който всеки възел има часовник, показваното време от който нараства със същата скорост, но които не са синхронизирани, т.е. може да показва различно време в един и същи реален момент. Показано е, че за този случай подобно следствие не е получено и следователно за частично синхронните мрежи има повече възможности за организиране на разпределени системи с "добри" свойства.

Да, в известен смисъл (не непременно същия, Howто Брюър е възнамерявал) може да се счита, че Гилбърт и Линч са доказали, че е невъзможно едновременно да се осигурят свойствата на атомарна последователност, достъпност и толерантност към разделяне на мрежа в една разпределена система. Но Howво общо има това с транзакциите в базата данни като цяло и по-специално с транзакциите на ACID?

4.3 ACID транзакции

Ето Howво пише Джулиан Браун за това в бележката си относно обсъждането на "теоремата" на CAP:

В своето доказателство Хилбърт и Линч използват термина атомарност instead of консистенция, което има повече смисъл от техническа гледна точка, защото, строго погледнато, консистенцията в смисъла на ACID се отнася до идеалните свойства на транзакциите в базата данни и означава, че ниHowви данни няма стават постоянни, ако нарушат някои предварително установени ограничения. Но ако приемем, че предварително установено ограничение на разпределените системи е забраната за наличието на няколко различни стойности за един и същ елемент от данни, тогава според мен този недостатък в абстракцията на последователност може да се счита за незначителен (освен това, ако Брюър използва термина атомност, тогава ще се появи теоремата на AAP, чието име би било изключително неудобно за произнасяне).

Това е написано не много сериозно, но честно. И всъщност изискването за атомна последователност не трябва да се смесва с изискванията за последователност на транзакциите в смисъла на ACID. Ограниченията за целостта на базата данни са логични, ако щете, бизнес изисквания. Те идват от логиката на домейна на приложението. Изискването за атомна последователност е от много различен вид. Това е изискване за внедряване, което попада в категорията, традиционно наричана в индустрията на базите данни физическа последователност (например, когато извършвате операция за промяна на индекса, всички блокове на съответното B+ дърво трябва да съдържат валидни стойности и да бъдат свързани с валидни препратки ).

А ето Howво съвсем сериозно пишат в своята бележка представителите на общността на бази данни Даниел Абади и Александър Томсън:

... изискването за наличност на мащабируеми транзакционни системи става все по-критично и това обикновено се изпълнява чрез репликация и автоматично пренасочване на заявки в случай на повреда на един от възлите. Следователно разработчиците на applications очакват, че гаранциите за последователност на системите ACID (първоначално състоящи се от локална поддръжка за дефинирани от потребителя инварианти) ще бъдат разширени, за да осигурят силна последователност (че всички реплики на едни и същи данни във всеки даден момент ще бъдат идентични копия, т.е. тази последователност на случаите се подразбира в смисъла на CAP/PACELC.

С други думи, последователността на Brewer няма нищо общо с последователността в смисъла на ACID, но е желателно да се поддържа силна последователност на репликите в системи, фокусирани върху осигуряване на висока достъпност чрез репликация на данни. Това не е свойство на ACID, а техническа (физическа) характеристика на масивна паралелна СУБД, която улеснява разработването на applications.

Според Майкъл Стоунбрейкър ключът към изграждането на висококачествена модерна СУБД е правилният избор на технически компромиси. При избора на конкретно инженерно решение трябва да се вземат предвид много фактори - изискванията на бъдещите потребители, вероятността от различни аварийни ситуации и т.н., а не да се ръководи догматично от няHowви общи теоретични насоки (включително CAP "теоремата").

Stonebreaker вярва, че в сферата на транзакционните системи с паралелни бази данни изоставянето на последователността на Брюър в полза на поддържането на висока наличност и толерантност към мрежови дялове е лош компромис, защото (а) последователността на репликите е много полезна характеристика на системата; (б) транзакционните масивни паралелни СУБД не се нуждаят от клъстери с много голям брой възли, така че ситуациите на разделяне на мрежата са малко вероятни; (в) системата може лесно да стане недостъпна не поради мрежов дял, а например поради наличието на редовно възникващи софтуерни грешки.

По този начин високата активност на представителите на NoSQL лагера (да се чете NoACID), които често се позовават на "теоремата" на Брюър, не е свързана с теоретичната невъзможност за изграждане на масивни паралелни транзакционни СУБД, които поддържат ACID транзакции, а с факта, че опростените системи които не поддържат само ACID транзакции, но и консистенция на реплика, се създават по-лесно и по-бързо. Благодарение на опростената си организация, те са способни на много бърза обработка на данни, а за някои applications това е по-важно от всички удобства, присъщи на технологията за бази данни.

Нека да видим How общността на базата данни ще отговори на това предизвикателство.