hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stack <st...@duboce.net>
Subject Re: Unique row ID constraint
Date Wed, 28 Apr 2010 16:42:35 GMT
Would the incrementValue [1] work for this?
St.Ack

1. http://hadoop.apache.org/hbase/docs/r0.20.3/api/org/apache/hadoop/hbase/client/HTable.html#incrementColumnValue%28byte[],%20byte[],%20byte[],%20long%29

On Wed, Apr 28, 2010 at 7:40 AM, Tatsuya Kawano
<tatsuyaml@snowcocoa.info> wrote:
> Hi,
>
> I'd like to implement unique row ID constraint (like the primary key
> constraint in RDBMS) in my application framework.
>
> Here is a code fragment from my current implementation (HBase
> 0.20.4rc) written in Scala. It works as expected, but is there any
> better (shorter) way to do this like checkAndPut()?  I'd like to pass
> a single Put object to my function (method) rather than passing rowId,
> family, qualifier and value separately. I can't do this now because I
> have to give the rowLock object when I instantiate the Put.
>
> ===============================================
> def insert(table: HTable, rowId: Array[Byte], family: Array[Byte],
>                               qualifier: Array[Byte], value:
> Array[Byte]): Unit = {
>
>    val get = new Get(rowId)
>
>    val lock = table.lockRow(rowId) // will expire in one minute
>    try {
>      if (table.exists(get)) {
>        throw new DuplicateRowException("Tried to insert a duplicate row: "
>                + Bytes.toString(rowId))
>
>      } else {
>        val put = new Put(rowId, lock)
>        put.add(family, qualifier, value)
>
>        table.put(put)
>      }
>
>    } finally {
>      table.unlockRow(lock)
>    }
>
> }
> ===============================================
>
> Thanks,
>
> --
> 河野 達也
> Tatsuya Kawano (Mr.)
> Tokyo, Japan
>
> twitter: http://twitter.com/tatsuya6502
>

Mime
View raw message