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