ACID in HBase

Jun 07, 2016 pm 04:28 PM
acid hbase

By Lars Hofhansl As we know, ACID stands for Atomicity, Consistency, Isolation, and Durability. HBase supports ACID in limited ways, namely Puts to the same row provide all ACID guarantees. (HBASE-3584 adds multi op transactions and HBASE-

By Lars Hofhansl

As we know, ACID stands for Atomicity, Consistency, Isolation, and Durability.

HBase supports ACID in limited ways, namely Puts to the same row provide all ACID guarantees. (HBASE-3584 adds multi op transactions and HBASE-5229 adds multi row transactions, but the principle remains the same)

So how does ACID work in HBase?

HBase employs a kind of MVCC. And HBase has no mixed read/write transactions.

The nomenclature in HBase is bit strange for historical reasons. In a nutshell each RegionServer maintains what I will call "strictly monotonically increasing transaction numbers".

When a write transaction (a set of puts or deletes) starts it retrieves the next highest transaction number. In HBase this is called a WriteNumber.
When a read transaction (a Scan or Get) starts it retrieves the transaction number of the last committed transaction. HBase calls this the ReadPoint.

Each created KeyValue is tagged with its transaction's WriteNumber (this tag, for historical reasons, is called the memstore timestamp in HBase. Note that this is separate from the application-visible timestamp.)

The highlevel flow of a write transaction in HBase looks like this:
  1. lock the row(s), to guard against concurrent writes to the same row(s)
  2. retrieve the current writenumber
  3. apply changes to the WAL (Write Ahead Log)
  4. apply the changes to the Memstore (using the acquired writenumber to tag the KeyValues)
  5. commit the transaction, i.e. attempt to roll the Readpoint forward to the acquired Writenumber.
  6. unlock the row(s)
The highlevel flow of a read transaction looks like this:
  1. open the scanner
  2. get the current readpoint
  3. filter all scanned KeyValues with memstore timestamp > the readpoint
  4. close the scanner (this is initiated by the client)
In reality it is a bit more complicated, but this is enough to illustrate the point. Note that a reader acquires no locks at all, but we still get all of ACID.

It is important to realize that this only works if transactions are committed strictly serially; otherwise an earlier uncommitted transaction could become visible when one that started later commits first. In HBase transaction are typically short, so this is not a problem.

HBase does exactly that: All transactions are committed serially.

Committing a transaction in HBase means settting the current ReadPoint to the transaction's WriteNumber, and hence make its changes visible to all new Scans.
HBase keeps a list of all unfinished transactions. A transaction's commit is delayed until all prior transactions committed. Note that HBase can still make all changes immediately and concurrently, only the commits are serial.

Since HBase does not guarantee any consistency between regions (and each region is hosted at exactly one RegionServer) all MVCC data structures only need to be kept in memory on every region server.

The next interesting question is what happens during compactions.

In HBase compactions are used to join multiple small store files (create by flushes of the MemStore to disk) into a larger ones and also to remove "garbage" in the process.
Garbage here are KeyValues that either expired due to a column family's TTL or VERSION settings or were marked for deletion. See here and here for more details.

Now imagine a compaction happening while a scanner is still scanning through the KeyValues. It would now be possible see a partial row (see here for how HBase defines a "row") - a row comprised of versions of KeyValues that do not reflect the outcome of any serializable transaction schedule.

The solution in HBase is to keep track of the earliest readpoint used by any open scanner and never collect any KeyValues with a memstore timestamp larger than that readpoint. That logic was - among other enhancements - added with HBASE-2856, which allowed HBase to support ACID guarantees even with concurrent flushes.
HBASE-5569 finally enables the same logic for the delete markers (and hence deleted KeyValues).

Lastly, note that a KeyValue's memstore timestamp can be cleared (set to 0) when it is older than the oldest scanner. I.e. it is known to be visible to every scanner, since all earlier scanner are finished.

Update Thursday, March 22: 
A couple of extra points:
  • The readpoint is rolled forward even if the transaction failed in order to not stall later transactions that waiting to be committed (since this is all in the same process, that just mean the roll forward happens in a Java finally block).
  • When updates are written to the WAL a single record is created for the all changes. There is no separate commit record.
  • When a RegionServer crashes, all in flight transaction are eventually replayed on another RegionServer if the WAL record was written completely or discarded otherwise.
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utilisation de Hadoop et HBase dans Beego pour le stockage et les requêtes Big Data Utilisation de Hadoop et HBase dans Beego pour le stockage et les requêtes Big Data Jun 22, 2023 am 10:21 AM

Avec l'avènement de l'ère du Big Data, le traitement et le stockage des données sont devenus de plus en plus importants, et la gestion et l'analyse efficaces de grandes quantités de données sont devenues un défi pour les entreprises. Hadoop et HBase, deux projets de la Fondation Apache, proposent une solution de stockage et d'analyse du Big Data. Cet article explique comment utiliser Hadoop et HBase dans Beego pour le stockage et les requêtes Big Data. 1. Introduction à Hadoop et HBase Hadoop est un système informatique et de stockage distribué open source qui peut

Rigueur des données dès la conception (ACID) dans la programmation PHP Rigueur des données dès la conception (ACID) dans la programmation PHP Jun 22, 2023 am 09:04 AM

Conception de rigueur des données (ACID) dans la programmation PHP En programmation PHP, la conception de rigueur des données est un aspect très important. Une application fiable doit non seulement gérer correctement les données, mais doit également garantir la sécurité et la cohérence des données. Pour cette raison, les développeurs doivent utiliser ACID pour la conception des données afin de garantir la stabilité et la fiabilité du système. ACID fait référence à l'atomicité, à la cohérence, à l'isolement et à la durabilité.

Comment intégrer hbase dans springboot Comment intégrer hbase dans springboot May 30, 2023 pm 04:31 PM

Dépendance : org.springframework.dataspring-data-hadoop-hbase2.5.0.RELEASEorg.apache.hbasehbase-client1.1.2org.springframework.dataspring-data-hadoop2.5.0.RELEASE La manière officielle d'ajouter une configuration consiste à utiliser XML, qui est simple Après réécriture, cela se présente comme suit : @ConfigurationpublicclassHBaseConfiguration{@Value("${hbase.zooke

Comment utiliser Java pour développer une application de base de données NoSQL basée sur HBase Comment utiliser Java pour développer une application de base de données NoSQL basée sur HBase Sep 20, 2023 am 08:39 AM

Comment utiliser Java pour développer une application de base de données NoSQL basée sur HBase Introduction : Avec l'avènement de l'ère du big data, la base de données NoSQL est devenue l'un des outils importants pour le traitement de données massives. HBase, en tant que système de base de données NoSQL distribué open source, possède de nombreuses applications dans le domaine du Big Data. Cet article explique comment utiliser Java pour développer des applications de base de données NoSQL basées sur HBase et fournit des exemples de code spécifiques. 1. Introduction à HBase : HBase est un système de distribution basé sur Hadoop.

Utilisez HBase dans le langage Go pour implémenter des applications de base de données NoSQL efficaces Utilisez HBase dans le langage Go pour implémenter des applications de base de données NoSQL efficaces Jun 15, 2023 pm 08:56 PM

Avec l’avènement de l’ère du Big Data, le stockage et le traitement de données massives sont devenus particulièrement importants. En termes de bases de données NoSQL, HBase est actuellement une solution largement utilisée. En tant que langage de programmation statiquement fortement typé, le langage Go est de plus en plus utilisé dans des domaines tels que le cloud computing, le développement de sites Web et la science des données en raison de sa syntaxe simple et de ses excellentes performances. Cet article expliquera comment utiliser HBase en langage Go pour implémenter des applications de base de données NoSQL efficaces. Introduction à HBase HBase est un logiciel de base hautement évolutif et hautement fiable.

PHP et Apache HBase s'intègrent pour implémenter la base de données NoSQL et le stockage distribué PHP et Apache HBase s'intègrent pour implémenter la base de données NoSQL et le stockage distribué Jun 25, 2023 pm 06:01 PM

Avec la croissance continue des applications Internet et du volume de données, les bases de données relationnelles traditionnelles ne peuvent plus répondre aux besoins de stockage et de traitement de données massives. En tant que nouveau type de système de gestion de bases de données, NoSQL (NotOnlySQL) présente des avantages significatifs en matière de stockage et de traitement massif de données et a reçu de plus en plus d'attention et d'applications. Parmi les bases de données NoSQL, ApacheHBase est une base de données distribuée open source très populaire. Elle est conçue sur la base de l'idée BigTable de Google et possède.

Utiliser HBase pour le stockage de données et les requêtes dans Beego Utiliser HBase pour le stockage de données et les requêtes dans Beego Jun 22, 2023 am 11:58 AM

Utilisation de HBase pour le stockage et les requêtes de données dans le framework Beego Avec le développement continu de l'ère Internet, le stockage et les requêtes de données sont devenus de plus en plus critiques. Avec l'avènement de l'ère du Big Data, diverses sources de données occupent une place importante dans leurs domaines respectifs. Les bases de données non relationnelles sont une base de données présentant des avantages évidents en matière de stockage et d'interrogation de données, et HBase est une base de données non relationnelle distribuée basée sur Hadoop. Base de données relationnelle. Cet article explique comment utiliser HBase pour le stockage de données et les requêtes dans le framework Beego. 1.H

Comment utiliser HBase pour le stockage de données et les requêtes dans Workerman Comment utiliser HBase pour le stockage de données et les requêtes dans Workerman Nov 07, 2023 am 08:30 AM

Workerman est un framework PHPsocket hautes performances pouvant héberger un grand nombre de connexions simultanées. Contrairement aux frameworks PHP traditionnels, Workerman ne s'appuie pas sur des serveurs Web tels qu'Apache ou Nginx, mais exécute lui-même l'intégralité de l'application en démarrant un processus PHP. Workerman a une efficacité opérationnelle extrêmement élevée et une meilleure capacité de charge. Dans le même temps, HBase est un système de base de données NoSQL distribué largement utilisé dans le Big Data.

See all articles