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

HBaseで同一カラムに同一タイムスタンプのデータをputすると別バージョンとして扱われるようなので、アプリケーションではタイムスタンプをキーに含めない方が良さそう。
9
Takuya UESHIN @ueshin

で、 https://issues.apache.org/jira/browse/HBASE-2406 でたくさん議論されてるけど英語読むのに時間がかかってるなう。。。しょんぼり。 #HBase

2010-08-25 21:44:24
Takuya UESHIN @ueshin

Fix Version/s が0.90.0になってるってことは 0.20系と0.89/0.90系ではこの辺の挙動が違うかもしれないわけですね。 #HBase

2010-08-25 21:47:29
Takuya UESHIN @ueshin

ちなみにうちの手元にあるのは #HBase 0.20.6です。

2010-08-25 21:48:27
Takuya UESHIN @ueshin

後半は重複タイムスタンプとは違う話題のよう。ある時点tsでの最新データを取得するにはどうするの?に対してsetTimeRange(0, ts+1)を使いましょうと。 QT @ueshin: で、 http://bit.ly/8ZP9Qw でたくさん議論されてる... #HBase

2010-08-25 22:39:42
Takuya UESHIN @ueshin

http://outerthought.org/blog/417-ot.html ここによるとタイムスタンプの扱いでいくつかバグがあるようだ。タイムスタンプをもう一つの次元として扱うのは推奨しませんって書いてある。#HBase

2010-08-25 22:57:55
Takuya UESHIN @ueshin

と、英語を読むのが遅すぎてこんな時間。速く読めるようになりたい。。。 というわけで今日はここまでにしよう。

2010-08-25 22:58:47
Takuya UESHIN @ueshin

@tatsuya6502 お知らせいただきありがとうございます。rowKeyにはキーたるべき値がすでにありますので、qualifierで同様に使えるかどうかを検討してみようと思います。

2010-08-25 23:35:12
Tatsuya Kawano @tatsuya6502

@ueshin なるほど、qualifier としてタイムスタンプをセットするのもひとつの解ですね。

2010-08-26 08:31:59
Takuya UESHIN @ueshin

これ再現しました。 昨日から放置してたやつに同じデータを突っ込んでみたらダブりました。 QT @ueshin: http://bit.ly/diciuw によると同じタイムスタンプを指定した両データの Put の間にflushが入ると、2つのデータができちゃう? #HBase

2010-08-26 21:23:07
ひしだま @hishidama

.@ueshin 自分が試しているのは#HBase 0.89.20100726(擬似分散環境)ですが、Putの間にフラッシュしてもしなくても別バージョンとしてGetされました。結局どういう仕様になるんでしょうねぇ…

2010-08-27 05:07:03
Tatsuya Kawano @tatsuya6502

@ueshin @hishidama 最初の頃に @m_mouri さんが言っているように、 #HBase では受け付けたPutを全て保存して、Get/Scanの際にタイムスタンプが一番大きいものを最新バージョンとします。 http://togetter.com/li/45048

2010-08-27 06:14:03
Tatsuya Kawano @tatsuya6502

@ueshin @hishidama @m_mouri #HBase がGet/Scanの時に重複したタイムスタンプをもつカラム値を見つけたら、両方を同順位として返すしかないです。レースで同タイムの選手を同順位にするのと同じ。優劣つけたかったら、じゃんけんで決めるしかない。

2010-08-27 06:18:08
Tatsuya Kawano @tatsuya6502

@ueshin @hishidama @m_mouri 同じ理由で、指定したタイムスタンプを持つカラム値だけを削除することもできないです。仮に、それができるAPIがあったとして、同じタイムスタンプを持つカラム値を、Put、Delete、Putって順番で操作すると、 #HBase

2010-08-27 06:38:38
Tatsuya Kawano @tatsuya6502

@ueshin @hishidama @m_mouri #HBase は、これらの2つのPutと1つのDeleteを全て記録します。Getの時に3つ見つかるわけですが、タイムスタンプが同じだと、DeleteがどのPutを指しているのか判断できません。

2010-08-27 06:39:14
Tatsuya Kawano @tatsuya6502

@ueshin @hishidama @m_mouri ですから #HBase では、同じタイムスタンプを持つカラム値を2回以上 Put することはおすすめできません。

2010-08-27 06:42:21
豊月 @yutuki_r

@2t3 @ashato ごめんHBaseのVersionの意味俺間違ってたかも。http://bit.ly/ab0b5w

2010-08-27 07:28:51