Or maybe convert double to long, just as hector's DoubleSerializer does
https://github.com/rantav/hector/blob/master/core/src/main/java/me/prettyprint/cassandra/serializers/DoubleSerializer.java
I was happy to use it here.
Tks,
- Eric
On 14/03/2011 02:52, aaron morton wrote:
There is nothing in the 0.8 trunk to add double support.
Could you shift the decimal point and use ints / longs ? Double is not a
precise type, so there is a possibility of the value changing as it's
serialised and deserialised around.
You were on the right track with extending abstract type. You would also need
to work out a precise binary representation for the numbers.
Hope that helps.
Aaron
On 14 Mar 2011, at 13:36, Paul Teasdale wrote:
I am quite new to Cassandra and am trying to model a simple Column Family which
uses Doubles as column names:
Datalines: { // ColumnFamilly
dataline-1:{ // row key
23.5: 'someValue',
23.6: 'someValue',
...
4334.99: 'someValue'
},
dataline-2:{
10.5: 'someValue',
12.6: 'someValue',
...
23334.99: 'someValue'
},
...
dataline-n:{
10.5: 'someValue',
12.6: 'someValue',
...
23334.99: 'someValue'
}
}
In declaring this column family, I need to specify a 'CompareWith' attribute
for a Double type, but the only available values I found for this attribute are:
* BytesType
* AsciiType
* UTF8Type
* LongType
* LexicalUUIDType
* TimeUUIDType
Is there any support anywere for double values (there has to be something)? And if
not, does this mean we need to extend
org.apache.cassandra.db.marshal.AbstractType<Double>?
package com.mycom.types;
class DoubleType extends org.apache.cassandra.db.marshal.AbstractType<Double>
{
public int compare(ByteBuffer o1, ByteBuffer o2){
// trivial implementation
Double d1 = o1.getDouble(0);
Double d2 = o2.getDoube(0);
return d1.compareTo(d2);
}
//...
}
And declare the column family:
<ColumnFamily CompareWith="<com.mycom.types.DoubleType>" Name="Datalines"/>
Thanks,
Paul