Co to jest spójność przyczynowa w Nosql

Opublikowany: 2022-12-13

Bazy danych NoSQL stają się w ostatnich latach coraz bardziej popularne, ponieważ organizacje poszukują alternatyw dla tradycyjnych relacyjnych baz danych. Jedną z kluczowych zalet baz danych NoSQL jest to, że mogą one zapewnić wysoki stopień elastyczności pod względem sposobu przechowywania danych i uzyskiwania do nich dostępu. Jednak ta elastyczność ma swoją cenę, a jednym z kompromisów jest to, że spójność przyczynowa często nie jest gwarantowana. Spójność przyczynowa to silny model spójności, który jest często używany w systemach rozproszonych. W systemie, który jest spójny przyczynowo, wszystkie zapisy powiązane przyczynowo muszą być widoczne dla wszystkich klientów w tej samej kolejności. Oznacza to, że jeśli dwaj klienci wykonują operacje zapisu, które są powiązane przyczynowo, to zapisy te muszą być widoczne w tej samej kolejności przez wszystkich pozostałych klientów. Kompromisem dla tej elastyczności jest to, że spójność przyczynowa często nie jest gwarantowana w bazach danych NoSQL. Oznacza to, że jeśli dwóch klientów wykonuje operacje zapisu, które są powiązane przyczynowo, nie ma gwarancji, że te zapisy będą widoczne w tej samej kolejności przez wszystkich innych klientów. Może to prowadzić do niespójności w danych przechowywanych w bazie danych. Istnieje wiele czynników, które mogą przyczynić się do przyczynowych niespójności w bazie danych NoSQL. Jednym z nich jest użycie ostatecznej spójności, która jest modelem spójności często używanym w bazach danych NoSQL. W ostatecznie spójnym systemie zapisy mogą nie być od razu widoczne dla wszystkich klientów, ale ostatecznie zostaną rozesłane do wszystkich replik. Oznacza to, że istnieje okno czasowe, w którym zapisy mogą być postrzegane przez różnych klientów poza kolejnością. Innym czynnikiem, który może przyczynić się do niespójności przyczynowych, jest stosowanie rozwiązania konfliktu, w którym ostatni wygrywa pisarz. W systemie typu „ostatni zapisujący wygrywa”, gdy dwaj klienci wykonują operacje zapisu, które są ze sobą w konflikcie, pierwszeństwo ma zapis od klienta, który wykonał operację jako ostatni. Może to prowadzić do niespójności, jeśli kolejność wykonywania operacji zapisu nie jest taka sama na wszystkich klientach. Rozwiązywanie konfliktów typu „ostatni zapisujący wygrywa” jest często stosowane w systemach, które ostatecznie są spójne, ponieważ może pomóc zapewnić, że ostatni zapis będzie widoczny dla wszystkich klientów. Jednak może to również prowadzić do niespójności, jeśli kolejność wykonywania operacji zapisu nie jest taka sama na wszystkich klientach. Ogólnie rzecz biorąc, kompromis w zakresie elastyczności baz danych NoSQL polega na tym, że nie gwarantują one spójności przyczynowej. Oznacza to, że istnieje ryzyko niespójności w przechowywanych danych

W tym artykule pokażę, w jaki sposób można złamać Gwarancje spójności przyczynowej MongoDB w czasie rzeczywistym. Większość jest również używana do naprawienia tego, przy czym pierwszą próbą jest użycie większości odczytów i zapisów. Następnie przyjrzymy się interwałom zegara logicznego i chaotycznym sesjom w Mongo. W tym przypadku użyję sterownika Mongo C# do kodowania, ale to zależy wyłącznie ode mnie. Większość członków zestawu replik potwierdziła dane, które zostały zwrócone z zapytania w Odczycie większościowym. Myśl o użyciu zapisu większościowego, po którym następuje odczyt większościowy, może wydawać się atrakcyjnym rozwiązaniem naszego problemu z zapisem własnym. Gdy większość zapisów zostanie zrozumiana, każdy serwer pomocniczy przechowuje w pamięci migawkę ostatniego zapisu większościowego.

Każdy obiekt ma przypisany wieloczęściowy znacznik czasu w modelu spójności przyczynowej , który jest realizowany przy jego użyciu. Te znaczniki czasu są przechowywane w wektorze zawierającym numer wersji obiektu w każdej replice.

Istnieje definicja. Spójność zapewnia, że ​​wszystkie procesy obserwują operacje przemienne w tej samej kolejności, wychwytując wszelkie potencjalne związki przyczynowe między operacjami. Innymi słowy, wszystkie procesy w systemie mają wspólne rozumienie sposobu wykonywania powiązanych przyczynowo operacji.

Oto kroki w kierunku spójności sekwencyjnej: a) spójna kolejność zapisów sekwencyjnych; b) spójna kolejność kolejnych zapisów; oraz c) spójna kolejność kolejnych zapisów. Pisząc w konsekwencji przyczynowej, konieczne jest zachowanie przyczynowo powiązanych odczytów w tej samej kolejności.

Czym jest spójność w Nosql?

Czym jest spójność w Nosql?
Źródło obrazu: https://slidesharecdn.com

W rezultacie bazy danych NoSQL wymagają znacznej spójności w celu utrzymania wysokiej dostępności. Nie osiągają silnej konsystencji; raczej prowadzą do długoterminowej spójności. Niepowodzenie w zwróceniu wyniku ostatniego zapisu może czasami wystąpić, ponieważ magazyny danych, które gwarantują funkcjonalność Base, mogą nie być w stanie tego zrobić.

Implementacja magazynu danych dokumentów będzie znacznie trudniejsza do modyfikacji niż implementacja modelu relacyjnego. Ponadto złożoność refaktoryzacji danych w magazynie pokładowym jest znacznie większa niż w przypadku prostych transformacji ETL RDBMS. Deweloperzy i architekci, którzy nie są świadomi, nie rozumieją lub boją się utraty pracy w przypadku popełnienia błędu, stracą tę szansę. Rozbiją niepodzielne transakcje na logiczne elementy, zamiast pamiętać, że replikacja i opóźnienie to procesy, a co gorsza, wciągać w ten proces systemy innych firm. W końcu zostanie to zlecone na zewnątrz i ktoś inny będzie nadal kierował działem.

Niespójności w bazach danych są spowodowane różnymi czynnikami, w tym nieprawidłowymi lub niekompletnymi danymi, brakującymi ograniczeniami, nieprawidłowymi wyzwalaczami lub niepoprawnie skonfigurowanymi kaskadami. Z powodu wszystkich tych problemów w bazie danych mogą być przechowywane nieprawidłowe dane. W rezultacie mogą wystąpić znaczące konsekwencje dla dokładności i skuteczności analiz i podejmowania decyzji. Kompletny i spójny schemat bazy danych to najważniejszy krok w kierunku zapewnienia dokładności i spójności danych. Ponadto dobrze zdefiniowany schemat zapewni prawidłowe wprowadzanie danych do bazy danych oraz właściwą interpretację reguł rządzących danymi. Dzięki temu analityka może dokładnie odzwierciedlać dane w bazie danych, zapobiegając niespójnościom.

Bazy danych Nosql nie są dobrze przystosowane do transakcji bankowych i bankomatowych

Niezawodność bazy danych nie jest tak płynna w przypadku nosql, jak w przypadku SQL, ponieważ większość z nich używa późniejszego modelu spójności. W rezultacie nie nadają się dobrze do transakcji takich jak bankowość i wypłaty z bankomatów, ponieważ dane mogą nie zawsze być spójne.

Co to jest spójność współbieżna i przyczynowo związana?

Co to jest spójność współbieżna i przyczynowo związana?
Źródło obrazu: https://slideserve.com

Spójność współbieżna i przyczynowo-skutkowa to rodzaj spójności, który występuje, gdy dwa lub więcej zdarzeń ma miejsce w tym samym czasie i są ze sobą powiązane. Ten rodzaj spójności jest ważny w wielu dziedzinach, takich jak fizyka i inżynieria, gdzie konieczne jest zapewnienie spójnego przebiegu zdarzeń.

System rozproszony składa się z wielu węzłów obliczeniowych, w których dane są udostępniane i replikowane. Spójność to właściwość systemu rozproszonego, która zapewnia, że ​​węzły i repliki mają ten sam widok danych w tym samym czasie. Jest to eksperymentalna metoda utrzymywania porządku w operacjach, które są ze sobą powiązane przyczynowo, przy użyciu słabej formy spójności. Główna różnica między konsekwencją przyczynową a konsekwencją sekwencyjną polega na tym, że spójność przyczynowa nie wymaga całkowitego rzędu wielkości. Intuicyjne poczucie spójności sugeruje, że odczyty są świeże tylko wtedy, gdy zapisy są zależne przyczynowo. Poniżej przedstawiono przykład systemu rozproszonego, który składa się z czterech procesów: P1, P2, P3 i P4.

Jest to właściwość, którą można obliczyć, biorąc liczbę procesów, które zgadzają się co do kolejności operacji, które wykonują zadanie ustalenia przyczynowości. Mówi się, że każdy proces, który spełnia następujące wymagania, jest spójny: dla dowolnych dwóch procesów P i Q, jeśli P powoduje Q, a Q powoduje R, to P powoduje R w dowolnym innym procesie. Jest miarą liczby procesów, które zgadzają się co do kolejności wykonywania wszystkich powiązanych przyczynowo operacji. Jeden proces jest spójny, jeśli spełnia następujące wymagania: P powoduje Q, a Q powoduje R, następnie P powoduje R. Wymóg spójności jest jednym z wymagań. Spójne procesy z większym prawdopodobieństwem doprowadzą do prawidłowych wniosków, jeśli będą stosowane w spójny sposób. Spójność procesu można mierzyć na różne sposoby. Jednym ze sposobów spojrzenia na to jest rozważenie, ile procesów uzgodniło kolejność, w jakiej występują operacje powiązane przyczynowo. W rezultacie istnieje wskaźnik spójności . Indeks spójności jest miarą tego, jak konsekwentnie utrzymywany jest proces. Aby proces był spójny, musi spełniać następujące wymagania: dla dowolnych dwóch procesów P powoduje Q, a Q powoduje R, więc P powoduje R oraz Q i Q. Wskaźnik spójności procesu jest miarą jego stabilności. Jeśli proces spełnia te wymagania, mówi się, że jest zgodny z następującymi zasadami: jeśli P powoduje Q, a Q powoduje R, P powoduje R dla dowolnych dwóch procesów P i Q. Jeśli proces nie spełnia wymogu spójności, uważa się, że niespójny. Niespójny proces z większym prawdopodobieństwem doprowadzi do błędnego wniosku. Indeks spójności może być użyty do oceny, jak spójny jest proces. Jest to metoda pomiaru spójności procesu i identyfikowania procesów, które dają dokładniejsze wnioski przyczynowe.

Spójność przyczynowa a spójność ostateczna

Istnieją dwa główne typy spójności w systemach rozproszonych: spójność przyczynowa i spójność ostateczna. Spójność przyczynowa gwarantuje, że jeśli dwa zdarzenia są ze sobą powiązane, to będą one postrzegane w tej samej kolejności przez wszystkie procesy. Ostateczna spójność gwarantuje, że przy wystarczającej ilości czasu wszystkie procesy zobaczą ten sam końcowy stan systemu, nawet jeśli nie zobaczą tych samych stanów pośrednich.

Spójność przyczynowa w systemie rozproszonym

Kryterium spójności może być użyte do określenia przyczynowości [1] w rozproszonych bazach danych. Jeśli operacja jest powiązana przyczynowo, każdy węzeł systemu rozproszonego wyświetla te same dane w tej samej kolejności, w jakiej są odczytywane i zapisywane.

Dobrze znane są również inne modele spójności, takie jak ewentualny i przyczynowy. W systemach rozproszonych są one bardziej powszechne niż w tradycyjnych bazach danych. Spójny model to fantazyjny sposób powiedzenia, że ​​system i jego użytkownicy mają spójną umowę. Gdy wystąpi interakcja, te funkcje opisują zachowanie systemu. Jeśli nasz system twierdzi, że można go serializować, musi pojawić się jako pojedyncza globalna lokalizacja, w której wszystkie operacje pojawiają się we wszystkich procesach w ich globalnym porządku, niezależnie od lokalizacji. Dopuszczalne jest przeplatanie operacji według uznania systemu. Chociaż rzeczywisty porządek procesu nie jest gwarantowany (zgodnie z definicją), jest on zapewniony, gdy zachowany jest porządek operacji.

Możliwe, że niektóre operacje będą nawet wyglądać, jakby miały miejsce lata temu. Fakt, że operacje (zapis/zapis) są ze sobą powiązane przyczynowo oznacza, że ​​kolejność ich rozdzielania powinna być jednakowa dla wszystkich procesów. Nie ma gwarancji kolejności, ponieważ oba procesy zapisują różne wartości x, jak pokazano na poniższym obrazku. Kiedy przestaniemy pisać nowe zapisy, system ostatecznie zbiegnie się do bardziej spójnego stanu. Ostateczna gwarancja spójności stanowi, że w systemie nie będą dokonywane żadne aktualizacje (zapisy), a wszyscy klienci będą mogli dokładnie zobaczyć, jak on działa. Jeśli napiszesz monotoniczne znaki na koncie o wartości 100 USD, zostaniesz obciążony opłatą w wysokości 165 USD. Gdy klient aktualizuje element w odczycie twoich zapisów (RYW), wartość tego elementu jest zwracana po zakończeniu aktualizacji. PRAM to rodzaj pamięci potokowej, która umożliwia procesom spojrzenie na wszystkie operacje z jednego procesu w ten sam sposób.

Ostateczna spójność Mongodb

Oznacza to, że dane, które czytasz, mogą nie być w tej chwili spójne, ale w końcu będą. Uzyskuje się to za pomocą dowolnego readPreferences, który może czytać z drugorzędnego.

W MongoDB dane podstawowe są zawsze replikowane asynchronicznie, podczas gdy dane wtórne są replikowane współbieżnie. Domyślnie MongoDB to w1: (pomyślnie zapis do podstawowego) i j: false dla kronikowania. Ze względu na replikację asynchroniczną , gdy partycja jest partycjonowana po stronie mniejszości lub traci swoją podstawową, zazwyczaj następuje utrata spójności. Podczas partycjonowania możemy dostosować wartości w i j, aby uzyskać różne poziomy opóźnień i spójne gwarancje we wszystkich obszarach. Gdy nie ma partycji, prędkość zapisu spada, a gdy jest zapis, zapis nie czeka na replikację. Jeśli używasz kombinacji w & j, odczyt/brak odczytu z elementów pomocniczych może mieć znaczący wpływ na poziomy spójności. MongoDB ma cztery różne poziomy spójności.

Najlepszym momentem na zapis jest brak partycji i wszystkie węzły są aktywne; MongoDB jest spójny i ma niskie opóźnienia. Kiedy działająca podstawowa została utracona, a partycja została wypełniona, jest to najczęstszy typ zapisu, który kończy się niepowodzeniem (błąd writeTimeout). Mamy Best Effort Availability w MongoDB, ponieważ niezależnie od tego, jak podzielimy klaster, zawsze stracimy jego część – przynajmniej procent. W CAP i CP/EC twierdzenia PACELC, w:większość, j:true i READ from primary mogą być użyte do sklasyfikowania MongoDB jako CP.

Jak Mongodb utrzymuje spójność?

Wielu klientów może jednocześnie odczytywać i zapisywać te same dane MongoDB. MongoDB stosuje blokowanie i zarządzanie współbieżnością, aby uniemożliwić klientom modyfikowanie tych samych danych w tym samym czasie. Kiedy piszemy do jednego dokumentu, albo piszemy go w całości, albo wcale, a klient zawsze widzi spójne wyniki.

Co to jest ostateczna spójność w Nosql?

Koncepcja ostatecznej spójności w modelowaniu danych polega na zapewnieniu, że zmiany wprowadzone w bazach danych NoSQL, które są rozproszone w wielu węzłach, zostaną odzwierciedlone we wszystkich z nich. W rezultacie to samo zapytanie do bazy danych zwróci te same wyniki w czasie.