ACID in 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 HofhanslAs 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:
- lock the row(s), to guard against concurrent writes to the same row(s)
- retrieve the current writenumber
- apply changes to the WAL (Write Ahead Log)
- apply the changes to the Memstore (using the acquired writenumber to tag the KeyValues)
- commit the transaction, i.e. attempt to roll the Readpoint forward to the acquired Writenumber.
- unlock the row(s)
- open the scanner
- get the current readpoint
- filter all scanned KeyValues with memstore timestamp > the readpoint
- close the scanner (this is initiated by the client)
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.
原文地址:ACID in HBase, 感谢原作者分享。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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.

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 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.

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

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 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

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
