【新機能】作り忘れたまとめはありませんか?31日前まで期間指定してまとめが作れる高度な検索ができました。有料APIだからツイートの漏れはありません!

HBaseで同一カラムに同一タイムスタンプのデータを登録した場合の挙動

HBaseで同一カラムに同一タイムスタンプのデータをputすると別バージョンとして扱われるようなので、アプリケーションではタイムスタンプをキーに含めない方が良さそう。
4849view 1コメント
9
ログインして広告を非表示にする
Takuya UESHIN @ueshin 2010-08-24 05:19:55
#HBase の動きがよくわからなくなってきた。。。同じカラムで同じタイムスタンプでも違うバージョンになるの?
Takuya UESHIN @ueshin 2010-08-24 05:39:22
RubyのShellからダブって見えるだけなのかな。集計値は大丈夫そう。 QT @ueshin: #HBase の動きがよくわからなくなってきた。。。同じカラムで同じタイムスタンプでも違うバージョンになるの?
M.Mouri @m_mouri 2010-08-24 05:39:56
@ueshin 詳しくはしらないけど、なるかも知れない。#HBaseでは追記しかしなくて、読み出しのときにソートして最新のタイムスタンプのカラムを取り出してたような。
ひしだま @hishidama 2010-08-24 05:51:20
@ueshin #hbase shellから同じカラムに同タイムスタンプで入れて、Javaのgetで全部取り出せるので、別バージョンとして扱われているみたいですね
Takuya UESHIN @ueshin 2010-08-24 06:00:42
なんと。 QT @hishidama: @ueshin #hbase shellから同じカラムに同タイムスタンプで入れて、Javaのgetで全部取り出せるので、別バージョンとして扱われているみたいですね
ひしだま @hishidama 2010-08-24 06:09:27
@ueshin えーと、GetにsetMaxVersions()を指定すると全バージョン取れます。デフォルトのGetでは同じタイムスタンプの中でも最後に書き込んだものが取れています。が、これが保証されているのかどうかは分かりません…
Takuya UESHIN @ueshin 2010-08-24 06:18:39
@hishidama デフォルトのGetでは、というのはsetMaxVersions()を指定しなかった場合ということですか?
ひしだま @hishidama 2010-08-24 06:22:56
@ueshin そうです。(最新の)1バージョンだけ取れる状態です。
Takuya UESHIN @ueshin 2010-08-24 06:24:53
@hishidama なるほど、setMaxVersions()を指定しなかったら、最新の1個が取得できて、指定したら同じタイムスタンプのものも複数取得できる感じですか。
ひしだま @hishidama 2010-08-24 06:27:12
@ueshin そういう感じですね。たぶんHBaseのDB内では全バージョン持っていて、Getに指定されたバージョン数だけクライアント側に返しているだけだと思います。
Takuya UESHIN @ueshin 2010-08-24 06:40:08
@hishidama ありがとうございます。バージョン=タイムスタンプで厳密に指定できると思い込んでいたので、ちょっとこちらの設計を変える必要がありそうですね。。。もう少し動作確認してみます。
Takuya UESHIN @ueshin 2010-08-24 06:44:34
どっちみち集計が重くてやり直しだったので頭を切り替える。というわけで今日はここまでにしよう。お休みの日とはいえ、明日(今日)は起きられるのか?
ひしだま @hishidama 2010-08-24 06:50:53
@ueshin Getでタイムスタンプを指定すれば、その中の最新データを取れそうな感じはします。ただ、列ファミリー毎に最大バージョン数が決まっているので、同じタイムスタンプが別バージョンになると、バージョン数の設計で考慮する必要がありそうですね。勉強になりました。
Tatsuya Kawano @tatsuya6502 2010-08-24 11:48:23
@ueshin @hishidama もしタイムスタンプをキーとして使いたいなら、rowIdのお尻に付けるのがおすすめです。そのときに、Long.MAX_VALUEから引いた値をつかうと、scanの際に最新から古いものへ順にreadできます。象本にサンプルが載ってます。
ひしだま @hishidama 2010-08-24 22:04:06
.@tatsuya6502 タイムスタンプを #hbase のキーに入れる象本のサンプルって、p.384ですね。やはりこれが定石になるんですかね。
ひしだま @hishidama 2010-08-24 22:09:21
どこかの導入事例で#HBase の採用理由のひとつに「バージョン管理が出来る」というのが入っていたような気がします。なのでタイムスタンプを使った履歴データもアプリケーションで使っていいかなーと思ったんですが。
ひしだま @hishidama 2010-08-24 22:14:58
でも、同じカラムを同一タイムスタンプで上書く場合はバージョンが別になるようなので、履歴を使いたい場合は、同一タイムスタンプでデータ更新はすべきではない、と認識しました。#hbase
Tatsuya Kawano @tatsuya6502 2010-08-25 08:14:41
@hishidama 実は Safari Books Online で英語版を購読しているだけなので訳本のページ番号はわからないのですが、はい、 RowKeyConverter#makeObservationRowKey() です。
Takuya UESHIN @ueshin 2010-08-25 20:39:13
先日の #HBase のバージョン(タイムスタンプ)問題、再現しない。。。同じタイムスタンプのものを Put すると上書きされるようだ。
Takuya UESHIN @ueshin 2010-08-25 20:46:26
でも確かに同じタイムスタンプのデータが存在する。。。なんじゃこりゃ。 #HBase
Takuya UESHIN @ueshin 2010-08-25 20:52:44
出るなら出る、出ないなら出ない、ハッキリしろー。
Takuya UESHIN @ueshin 2010-08-25 21:38:09
それっぽい議論発見。 まずは去年のやつ。 https://issues.apache.org/jira/browse/HBASE-997 によると同じタイムスタンプを指定した両データの Put の間にflushが入ると、2つのデータができちゃう?
Takuya UESHIN @ueshin 2010-08-25 21:39:35
それっぽい議論発見。 まずは去年のやつ。 http://bit.ly/diciuw によると同じタイムスタンプを指定した両データの Put の間にflushが入ると、2つのデータができちゃう? #HBase (タグ付け忘れた。
Takuya UESHIN @ueshin 2010-08-25 21:41:50
これも去年のか。 https://issues.apache.org/jira/browse/HBASE-1485 によると重複したバージョンを返しますよと。同じバージョンだった時に返す順番をどうします?と? #HBase
残りを読む(16)
安心安全にみんなのツイートを残しておける。 今日の出来事をまとめて残そう。

ブックマークしたタグ

あなたの好きなタグをブックマークしておこう!話題のまとめを見逃さなくなります。
ログインして広告を非表示にする
ログインして広告を非表示にする