我试图用一个32位有符号整数的比较器/验证器创建动态列。这显然将节省存储空间和其他优势。目前,如果我有一个utf8type验证器(使用twitter的cassandra客户机for ruby),这个方法非常有效:
db.insert(:foo, 'mykey', {'mycol' => 'myval'})
这就是问题发生的地方:
db.insert(:foo, 'mykey', {5 => 'myval'})
我认为这更像是Ruby的问题而不是Cassandra的问题。使用rails控制台,我得到了以下信息:
TypeError: no implicit conversion of Fixnum into String
进一步澄清,我不能简单地做:
db.insert(:foo, 'mykey', {'5' => 'myval'})
这将触发验证失败,该失败要求列为整数,而不是字符串。
有没有一种方法可以让这个在ruby中合理地工作,这样我就不必使用utf8type列名,并且可以在基于cassandra1.2的应用程序中使用基于int的列名?
2条答案
按热度按时间5lhxktic1#
@Yoshiji先生
fixnum可以在ruby哈希中声明为键。
只要使用正确的语法。你用的是ruby,不是python!!!
i86rm4rw2#
twitter cassandra库让开发人员序列化/反序列化所有值。它要求你给它的所有东西都是二进制字符串表示。因此,如果你想使用int作为你的比较器,你需要在插入之前打包它们,在从cassandra中取出它们时解包它们。您的插入需要如下所示: