从Ruby Cassandra Gem读取数值数据的问题

时间:2013-01-29 18:36:21

标签: ruby cassandra

我在使用Cassandra Gem从Cassandra读取数据时遇到问题.... 这是我的代码:

require 'cassandra'
@states = {}
@client = Cassandra.new('Logs', "10.1.1.11:9160")
@client.get_range(:PlaybackStates) do |ckey,bb|
    @states[bb["State"].to_sym] = key
end
pp @states

我明白了:

{:DrmInit=>"\x00\x00\x00(",
 :Buffering=>"\x00\x00\x00x",
 :PreBuffering=>"\x00\x00\x002",
 :Debug=>"\x00\x00\x016",
 :FullScreen=>"\x00\x00\x01\x90",
 :Seek=>"\x00\x00\x00\x96",
 :LoadManifest=>"\x00\x00\x00\x14",
 :Play=>"\x00\x00\x00d"}

这就是我的预期:

{:DrmInit=>[40],
 :Buffering=>[120],
 :PreBuffering=>[50],
 :Debug=>[310],
 :FullScreen=>[400],
 :Seek=>[150],
 :LoadManifest=>[20],
 :Play=>[100]}

我可以通过在代码中执行此操作来获得此结果:

require 'cassandra'
@states = {}
@client = Cassandra.new('Logs', "10.1.1.11:9160")
@client.get_range(:PlaybackStates) do |ckey,bb|
    @states[bb["State"].to_sym] = ckey.unpack("N*") # unpacking the string with N*
end
pp @states

我也得到了TimeStamp& amp;的二进制表示。日期字段...... 难道我做错了什么??为什么数据类型没有被GEM转换?

1 个答案:

答案 0 :(得分:1)

来自Twitter的cassandra gem目前还不了解UTF8以外的数据类型。因此,它会将原生整数和其他数据类型解释为字符串。

我建议使用cassandra-cql gem。它完全支持将本机Cassandra数据类型映射到本机Ruby类型。

https://github.com/kreynolds/cassandra-cql

http://rubygems.org/gems/cassandra-cql