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.
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Menggunakan Hadoop dan HBase dalam Beego untuk penyimpanan data besar dan pertanyaan Menggunakan Hadoop dan HBase dalam Beego untuk penyimpanan data besar dan pertanyaan Jun 22, 2023 am 10:21 AM

Dengan kemunculan era data besar, pemprosesan dan penyimpanan data menjadi semakin penting, dan cara mengurus dan menganalisis sejumlah besar data dengan cekap telah menjadi cabaran bagi perusahaan. Hadoop dan HBase, dua projek Yayasan Apache, menyediakan penyelesaian untuk penyimpanan dan analisis data besar. Artikel ini akan memperkenalkan cara menggunakan Hadoop dan HBase dalam Beego untuk storan dan pertanyaan data besar. 1. Pengenalan kepada Hadoop dan HBase Hadoop ialah sistem storan dan pengkomputeran teragih sumber terbuka yang boleh

Data Rigor by Design (ACID) dalam Pengaturcaraan PHP Data Rigor by Design (ACID) dalam Pengaturcaraan PHP Jun 22, 2023 am 09:04 AM

Reka bentuk ketegasan data (ACID) dalam pengaturcaraan PHP Dalam pengaturcaraan PHP, reka bentuk ketegasan data adalah aspek yang sangat penting. Aplikasi yang boleh dipercayai bukan sahaja perlu mengendalikan data dengan betul, tetapi juga perlu memastikan keselamatan dan konsistensi data. Atas sebab ini, pembangun perlu menggunakan ACID untuk reka bentuk data bagi memastikan kestabilan dan kebolehpercayaan sistem. ACID merujuk kepada Atomicity, Consistency, isolation and Durability.

Bagaimana untuk mengintegrasikan hbase dalam springboot Bagaimana untuk mengintegrasikan hbase dalam springboot May 30, 2023 pm 04:31 PM

Ketergantungan: org.springframework.dataspring-data-hadoop-hbase2.5.0.RELEASEorg.apache.hbasehbase-client1.1.2org.springframework.dataspring-data-hadoop2.5.0.RELEASE Cara rasmi untuk menambah konfigurasi adalah melalui xml, iaitu mudah Selepas menulis semula, ia adalah seperti berikut: @ConfigurationpublicclassHBaseConfiguration{@Value("${hbase.zooke

Cara menggunakan Java untuk membangunkan aplikasi pangkalan data NoSQL berdasarkan HBase Cara menggunakan Java untuk membangunkan aplikasi pangkalan data NoSQL berdasarkan HBase Sep 20, 2023 am 08:39 AM

Cara menggunakan Java untuk membangunkan aplikasi pangkalan data NoSQL berdasarkan HBase Pengenalan: Dengan kemunculan era data besar, pangkalan data NoSQL telah menjadi salah satu alat penting untuk memproses data besar-besaran. HBase, sebagai sistem pangkalan data NoSQL teragih sumber terbuka, mempunyai aplikasi yang luas dalam bidang data besar. Artikel ini akan memperkenalkan cara menggunakan Java untuk membangunkan aplikasi pangkalan data NoSQL berdasarkan HBase dan menyediakan contoh kod khusus. 1. Pengenalan kepada HBase: HBase ialah sistem pengedaran berdasarkan Hadoop.

Gunakan HBase dalam bahasa Go untuk melaksanakan aplikasi pangkalan data NoSQL yang cekap Gunakan HBase dalam bahasa Go untuk melaksanakan aplikasi pangkalan data NoSQL yang cekap Jun 15, 2023 pm 08:56 PM

Dengan kemunculan era data besar, penyimpanan dan pemprosesan data besar-besaran telah menjadi sangat penting. Dari segi pangkalan data NoSQL, HBase kini merupakan penyelesaian yang digunakan secara meluas. Sebagai bahasa pengaturcaraan yang ditaip kuat secara statik, bahasa Go semakin digunakan dalam bidang seperti pengkomputeran awan, pembangunan tapak web dan sains data kerana sintaksnya yang mudah dan prestasi cemerlang. Artikel ini akan memperkenalkan cara menggunakan HBase dalam bahasa Go untuk melaksanakan aplikasi pangkalan data NoSQL yang cekap. Pengenalan HBase HBase adalah asas yang sangat berskala, sangat boleh dipercayai

PHP dan Apache HBase berintegrasi untuk melaksanakan pangkalan data NoSQL dan storan teragih PHP dan Apache HBase berintegrasi untuk melaksanakan pangkalan data NoSQL dan storan teragih Jun 25, 2023 pm 06:01 PM

Dengan pertumbuhan berterusan aplikasi Internet dan volum data, pangkalan data hubungan tradisional tidak lagi dapat memenuhi keperluan menyimpan dan memproses data besar-besaran. Sebagai sistem pengurusan pangkalan data jenis baharu, NoSQL (NotOnlySQL) mempunyai kelebihan ketara dalam penyimpanan dan pemprosesan data secara besar-besaran, dan telah menerima lebih banyak perhatian dan aplikasi. Antara pangkalan data NoSQL, ApacheHBase ialah pangkalan data teragih sumber terbuka yang sangat popular Ia direka berdasarkan idea BigTable Google dan mempunyai

Menggunakan HBase untuk penyimpanan data dan pertanyaan dalam Beego Menggunakan HBase untuk penyimpanan data dan pertanyaan dalam Beego Jun 22, 2023 am 11:58 AM

Menggunakan HBase untuk penyimpanan data dan pertanyaan dalam rangka kerja Beego Dengan perkembangan berterusan era Internet, penyimpanan data dan pertanyaan menjadi semakin kritikal. Dengan kemunculan era data besar, pelbagai sumber data menduduki kedudukan penting dalam bidang masing-masing Pangkalan data bukan hubungan adalah pangkalan data dengan kelebihan yang jelas dalam penyimpanan dan pertanyaan data, dan HBase ialah pangkalan data bukan hubungan yang diedarkan berdasarkan Hadoop. Pangkalan data perhubungan. Artikel ini akan memperkenalkan cara menggunakan HBase untuk penyimpanan data dan pertanyaan dalam rangka kerja Beego. 1. H

Cara menggunakan HBase untuk penyimpanan data dan pertanyaan dalam Workerman Cara menggunakan HBase untuk penyimpanan data dan pertanyaan dalam Workerman Nov 07, 2023 am 08:30 AM

Workerman ialah rangka kerja PHPsocket berprestasi tinggi yang boleh mengehoskan sejumlah besar sambungan serentak. Tidak seperti rangka kerja PHP tradisional, Workerman tidak bergantung pada pelayan web seperti Apache atau Nginx Sebaliknya, ia menjalankan keseluruhan aplikasi dengan sendirinya dengan memulakan proses PHP. Pekerja mempunyai kecekapan operasi yang sangat tinggi dan kapasiti beban yang lebih baik. Pada masa yang sama, HBase ialah sistem pangkalan data NoSQL teragih yang digunakan secara meluas dalam data besar

See all articles