我有一个非常奇怪和简单的问题,但我无法理解发生了什么。我有一个具有以下结构的列族:
比较器:DecimalType 验证器:CompositeType(DecimalType,DecimalType,DecimalType,DecimalType) 行键:CompositeType(BytesType,BytesType,IntegerType,IntegerType,IntegerType,DateType,IntegerType,DateType)
我认为问题是比较器。当我尝试插入新数据时,它不起作用,我收到此消息:在localhost上执行batch_mutate时出错:exception' TTransportException'使用消息' TSocket:超时读取localhost的4个字节:9160'。如果我将比较器更改为AsciiType,它可以正常工作。我试图在列名中插入的内容类似于:2.97。我认为它是一个真正的数字类型,因为它来自PHP数学运算,并确保它是一个数字我已经完成了对最终结果的转换,以将其转换为浮点数。如果比较器是DecimalType,它在使用或不使用转换时不起作用,但如果比较器是AsciiType,它总是有效。最奇怪的是:只有当数字很小时它才会失败。例如,它失败了2.97但它适用于561.21。
我在计数器列族中遇到同样的问题,我假设我不能将DecimalType用作计数器的列名,但为什么呢?
任何人都可以帮助我吗?我使用的是错误的类型吗?我不认为AsciiType是正确的类型。
谢谢!
答案 0 :(得分:1)
您是如何创建列族/表的?通过cql3还是节俭?如果不是混合Thrift和CQL3的情况,它应该工作。
答案 1 :(得分:0)
我想我已经找到了发生的事情。如你所料,vivek mishra,问题是PHPCassa。我曾使用DecimalType作为值,并没有给出任何问题,因此我认为该类型是在PHPCassa中定义的。但问题是没有定义DecimalType。这对我来说是不可思议的,但文档很清楚:
http://thobbs.github.io/phpcassa/api/class-phpcassa.Schema.DataType.html
当它用于列值时,我猜这个过程是不同的,尽管该类型不存在,但是存储了该数字。但是当它在比较器中使用时,对于列名,我猜phpcassa处理排序和其他事情所做的操作会导致插入失败。
然后,如果我想使用PHPCassa(我想因为我几乎所有的项目都开发后都无法改变)我想我必须使用不同的类型来存储列名中的金额。
感谢您帮助我。