Ruby で Twissandra と同じタイムスタンプを生成するには
Twissandra の「Schema Layout」のうち、Timeline と Userline では以下のようにカラムにタイムスタンプを使っているようですが、Ruby でこれをどう生成すればいいかで少し悩みました。
viksit's twissandra at master - GitHub
http://github.com/viksit/twissandra
Timeline = { 'a4a70900-24e1-11df-8924-001ff3591711': { # timestamp of tweet: tweet id 1267414247561777: '7561a442-24e2-11df-8924-001ff3591711', 1267414277402340: 'f0c8d718-24e2-11df-8924-001ff3591711', 1267414305866969: 'f9e6d804-24e2-11df-8924-001ff3591711', 1267414319522925: '02ccb5ec-24e3-11df-8924-001ff3591711', }, } Userline = { 'a4a70900-24e1-11df-8924-001ff3591711': { # timestamp of tweet: tweet id 1267414247561777: '7561a442-24e2-11df-8924-001ff3591711', 1267414277402340: 'f0c8d718-24e2-11df-8924-001ff3591711', 1267414305866969: 'f9e6d804-24e2-11df-8924-001ff3591711', 1267414319522925: '02ccb5ec-24e3-11df-8924-001ff3591711', }, }
Ruby でタイムスタンプというと、Time#to_i、もしくは Time#to_f ですが、これらは以下のような出力になります。
ruby -r time -e 'p Time.now.to_i' #=> 1273764355 > ruby -r time -e 'p Time.now.to_f' #=> 1273764359.34589
これではちょっと違いますね・・・。
一意でありさえすれば全く同じである必要もないと思うのですが、なんとなく気になったので、cass.py を参考に、以下のようにしてみました。
同じ形式のタイムスタンプの取得と、そこからの Time 型の復元ができているようです。
ruby -r time -e 'p (Time.now.to_f * 1e6).to_i' #=> 1273765302606557 ruby -r time -e 'p Time.at(1273765302606557 / 1e6)' #=> Fri May 14 00:41:42 +0900 2010
これで Timeline、Userline のように日時をカラム名に値を持つような構造も同じように実装出来そうです。
Instant Apache Cassandra for Developers Starter
posted with amazlet at 13.06.05
Vivek Mishra
Packt Publishing
Packt Publishing