데이터 베이스 MySQL 튜토리얼 HBase intra row scanning

HBase intra row scanning

Jun 07, 2016 pm 04:26 PM
hbase

By Lars Hofhansl Updated (again) Wednesday, January 25th, 2012. As I painfully worked through HBASE-5229 I realized that HBase already has all the building blocks needed for complex (local) transactions. What's important here is that (see

By Lars Hofhansl

Updated (again) Wednesday, January 25th, 2012.

As I painfully worked through HBASE-5229 I realized that HBase already has all the building blocks needed for complex (local) transactions.

What's important here is that (see my introduction to HBase):
  1. HBase ensures atomicity for operations for the same row key
  2. HBase keys have internal structure: (row-key, column family, column, ...)
The missing piece was ColumnRangeFilter. With this filter it is possible to retrieve all columns whose identifier starts with "abc", or all columns whose identifier sorts > "test". For example:

// all columns whose identifier starts with "abc"
Filter f = new ColumnRangeFilter(Bytes.toBytes("abc"), true,
Bytes.toBytes("abd"), false);

// all columns whose identifier sorts after "test"
Filter f = new ColumnRangeFilter(Bytes.toBytes("test"), true,
null, true);


So this allows to search (scan) inside a row by column identifier just  as HBase allows searching by row key.

A client application can exploit this to achieve transactions by grouping all entities that can participate in the same transaction into a single row (and single column family).
Then using prefixes of the column identifiers can be used to define rows inside that group. Basically the search criteria for keys was moved one level down to the column identifier.

Say we wanted to implement a store with transactional tables that contain rows and columns. One way to doing this with HBase as follows:
  • the HBase row-key/column-family maps to a "table"
  • a prefix of the HBase column identifier maps to a "row"
  • the rest of the HBase column identifier identifies the "column"
This is in fact similar to what Google's Megastore (pdf) does.

This leads to potentially wide HBase rows with many columns. The missing piece is allowing a Scan to efficiently retrieve a slice of a wide row.

This where ColumnRangeFilter comes into play. This filter seeks efficiently into the row by seeking ahead to the first HBase block that contains the first KeyValue (or cell) for that column.

Let's model a table "pets" this way. And let's say a pet has a name and a species. The HBase key for entries would look like this:
(table, CF1, rowA|column1) -> value for column1 in rowA
The code would look something like this:
(apologies for the initial incorrect code that I had posted here)

HTable t = ...;
Scan s = ...;
s.setStartRow("pets");
s.setStopRow("pets");
// get all columns for my pet "fluffy".
Filter f = new ColumnRangeFilter(Bytes.toBytes("fluffy"), true,
                                 Bytes.toBytes("fluffz"), false);
s.setFilter(f);
s.setBatch(20); // avoid getting all columns for the HBase row
ResultScanner rs = t.getScanner(s);
for (Result r = rs.next(); r != null; r = rs.next()) {

  // r will now have all HBase columns that start with "fluffy",

  // which would represent a single row
  for (KeyValue kv : r.raw()) {
    // each kv represent - the latest version of - a column
  }
}

The downside of this is that HBase achieves atomicity by collocating all cells with the same row-key, so it has to be hosted by a single region server.
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

빅 데이터 저장 및 쿼리를 위해 Beego에서 Hadoop 및 HBase 사용 빅 데이터 저장 및 쿼리를 위해 Beego에서 Hadoop 및 HBase 사용 Jun 22, 2023 am 10:21 AM

빅 데이터 저장 및 쿼리를 위해 Beego에서 Hadoop 및 HBase 사용

springboot에 hbase를 통합하는 방법 springboot에 hbase를 통합하는 방법 May 30, 2023 pm 04:31 PM

springboot에 hbase를 통합하는 방법

Go 언어에서 HBase를 사용하여 효율적인 NoSQL 데이터베이스 애플리케이션 구현 Go 언어에서 HBase를 사용하여 효율적인 NoSQL 데이터베이스 애플리케이션 구현 Jun 15, 2023 pm 08:56 PM

Go 언어에서 HBase를 사용하여 효율적인 NoSQL 데이터베이스 애플리케이션 구현

Beego에서 데이터 저장 및 쿼리를 위해 HBase 사용 Beego에서 데이터 저장 및 쿼리를 위해 HBase 사용 Jun 22, 2023 am 11:58 AM

Beego에서 데이터 저장 및 쿼리를 위해 HBase 사용

Java를 사용하여 HBase 기반 NoSQL 데이터베이스 애플리케이션을 개발하는 방법 Java를 사용하여 HBase 기반 NoSQL 데이터베이스 애플리케이션을 개발하는 방법 Sep 20, 2023 am 08:39 AM

Java를 사용하여 HBase 기반 NoSQL 데이터베이스 애플리케이션을 개발하는 방법

NoSQL 데이터베이스와 분산 스토리지를 구현하기 위해 PHP와 Apache HBase가 통합되었습니다. NoSQL 데이터베이스와 분산 스토리지를 구현하기 위해 PHP와 Apache HBase가 통합되었습니다. Jun 25, 2023 pm 06:01 PM

NoSQL 데이터베이스와 분산 스토리지를 구현하기 위해 PHP와 Apache HBase가 통합되었습니다.

Workerman에서 데이터 저장 및 쿼리를 위해 HBase를 사용하는 방법 Workerman에서 데이터 저장 및 쿼리를 위해 HBase를 사용하는 방법 Nov 07, 2023 am 08:30 AM

Workerman에서 데이터 저장 및 쿼리를 위해 HBase를 사용하는 방법

HBase 캐싱 기술에 대해 알아보기 HBase 캐싱 기술에 대해 알아보기 Jun 20, 2023 pm 07:15 PM

HBase 캐싱 기술에 대해 알아보기

See all articles