Baza danych: co to jest Multiversion Concurrency Control (MVCC) i kto ją obsługuje? [zamknięte]

Ostatnio Jeff napisał o swoich problemach z blokadami baz danych związanymi z czytaniem. Multiversion Concurrency Control (MVCC) twierdzi, że rozwiązuje ten problem. Co to jest i jakie bazy danych go obsługują?

Updated: these support it (which other?)

  • oracle
  • postgresql
Author: Basil Bourque, 2008-08-26

15 answers

Oracle ma doskonały system kontroli wielu wersji od bardzo dawna (przynajmniej od oracle 8.0)

Podążanie powinno pomóc.

  1. Użytkownik a rozpoczyna transakcję i aktualizuje 1000 wierszy z pewną wartością w czasie T1
  2. użytkownik B odczytuje te same 1000 wierszy w czasie T2.
  3. Użytkownik a aktualizuje wiersz 543 o wartość Y (oryginalna wartość X)
  4. użytkownik B osiąga wiersz 543 i stwierdza, że transakcja działa od czasu T1.
  5. baza danych zwraca niezmodyfikowany zapis z dzienników. Zwracana wartość jest wartością, która została zaangażowana w tym czasie, mniejszą lub równą T2.
  6. Jeśli rekord nie może zostać wycofany z dzienników redo, oznacza to, że baza danych nie jest odpowiednio skonfigurowana. Dzienniki muszą mieć więcej miejsca.
  7. w ten sposób uzyskuje się zgodność odczytu. Zwracane wyniki są zawsze takie same w odniesieniu do czasu rozpoczęcia transakcji. Więc w ramach transakcji spójność odczytu jest / align = "left" /

Starałem się wyjaśnić w najprostszy możliwy sposób...istnieje wiele do wielowersji w bazach danych.

 32
Author: Krantz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 08:04:44

Kontrola współbieżności wielu wersji PostgreSQL

Oraz Ten artykuł, który zawiera schematy działania MVCC podczas wydawania poleceń INSERT, UPDATE I DELETE.

 9
Author: thelsdj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 12:04:50

Następujące mają implementację MVCC:

SQL Server 2005 (Non-default, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (od wersji 8)

MySQL 5 (tylko z tabel InnoDB)

PostgreSQL

Firebird

Informix

Jestem pewien, że Sybase i IBM DB2 Mainframe / LUW nie mają implementacji MVCC

 8
Author: John Greeley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-04 17:53:34

XtremeData dbX obsługuje MVCC.

DODATKOWO dbX może korzystać z baz danych SQL zaimplementowanych w sprzęcie FPGA.

 3
Author: lit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-14 12:35:37

Firebird to robi, nazywają to mga (Multi Generational Architecture).

Zachowują oryginalną wersję nienaruszoną i dodają nową wersję, którą może zobaczyć tylko sesja używająca jej, po zatwierdzeniu starsza wersja jest wyłączona,a nowsza wersja jest włączona dla wszystkich (plik gromadzi się z danymi i wymaga regularnego czyszczenia).

Oracle nadpisuje same dane i używa rollback segments/undo tablespaces dla innych sesji i do rollback.

 2
Author: Osama Al-Maadeed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 06:12:52

SAP HANA używa również MVCC. SAP HANA jest pełnym systemem obliczeniowym w pamięci, więc koszty MVCC dla select są bardzo niskie... :)

 2
Author: OlivierH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-12 08:15:50

Oto link do strony Doc PostgreSQL na MVCC . Cytat z wyboru (podkreślenie):

Główną zaletą używania modelu MVCC kontroli współbieżności zamiast blokowania jest to, że w MVCC blokady nabyte do zapytań (odczytu) danych nie są sprzeczne z blokami nabyte do zapisu danych, a więc odczyt nigdy nie blokuje zapisu, a zapis nigdy nie blokuje odczytu.

Dlatego Jeff był tak uwikłany przez swoje impasy. Lektura nigdy nie powinna być w stanie aby je wywołać.

 1
Author: Neall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 11:31:37

SQL Server 2005 i nowsze oferują MVCC jako opcję; nie jest to jednak domyślne. MS nazywa to izolacją migawek, jeśli pamięć służy.

 1
Author: DrPizza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 21:56:36

MVCC można również zaimplementować ręcznie, dodając kolumnę z numerem wersji do tabel i zawsze wykonując wstawki zamiast aktualizacji.

Koszt tego jest znacznie większa baza danych, i wolniej wybiera, ponieważ każdy z nich potrzebuje subquery, aby znaleźć najnowszy rekord.

To doskonałe rozwiązanie dla Systemów, które wymagają 100% audytu dla wszystkich zmian.

 1
Author: Eric Z Beard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 22:00:06

MySQL domyślnie używa również MVCC, jeśli używasz tabel InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

 1
Author: Seun Osewa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 03:52:10

McObject ogłosił w 11/09, że dodał opcjonalny Menedżer transakcji MVCC do wbudowanej bazy danych eXtremeDB:

Http://www.mcobject.com/november9/2009

EXtremeDB, pierwotnie opracowany jako system baz danych w pamięci (IMDS), jest teraz dostępny w wersjach z pamięcią hybrydową (w pamięci/na dysku), wysoką dostępnością, obsługą 64-bitową i wieloma innymi.

 1
Author: Ted Kenney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-31 02:55:31

Jest dobre wyjaśnienie MVCC -- z diagramami -- i kilkoma liczbami wydajności eXtremeDB w tym artykule, napisanym przez współzałożyciela i CEO McObject, w RTC Magazine:

Http://www.rtcmagazine.com/articles/view/101612

Najwyraźniej MVCC jest coraz bardziej korzystne, ponieważ aplikacja skaluje wiele zadań wykonywanych na wielu rdzeniach procesora.

 1
Author: Ted Kenney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-31 03:01:04

DB2 w wersji 9.7 posiada licencjonowaną wersję postgress plus. Oznacza to, że ta funkcja (w odpowiednim trybie) obsługuje tę funkcję.

 0
Author: Ciaran De Buitlear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-20 11:40:18

Berkeley DB obsługuje również MVCC.

I kiedy bdb storage engine jest używany w MySQL, MySQL obsługuje również MVCC.

Berkeley DB jest bardzo potężnym, konfigurowalnym w pełni ACID conform DBMS. Obsługuje kilka różnych metod indeksowania, replikacji master-slave, może być używany jako czysty magazyn wartości klucza z własnym dynamicznym API lub zapytany z SQL, jeśli chcesz. Warto się temu przyjrzeć.

Innym zorientowanym na dokument DBMS obejmującym MVCC będzie CouchDB. MVCC jest tu również dużym plusem dla wbudowanej replikacji peer-to-peer.

 0
Author: chris polzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-25 12:35:12

Z http://vschart.com/list/multiversion-concurrency-control/

Couchbase, OrientDB, CouchDB, PostgreSQL, Projekt Voldemort, BigTable, Serwer Percona, HyperGraphDB, Mżawka, Cloudant, IBM DB2, InterSystems Caché, InterBase

 0
Author: Sean Timm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-23 21:03:56