现在的位置: 首页 > 综合 > 正文

Cassandra Java 使用TimeUUIDType

2013年02月20日 ⁄ 综合 ⁄ 共 3627字 ⁄ 字号 评论关闭

参考地址 http://wiki.apache.org/cassandra/FAQ#working_with_timeuuid_in_java

下载一个包 http://johannburkard.de/software/uuid/

 

代码示例:

代码
import java.util.List;

import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.TException;
import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnOrSuperColumn;
import org.apache.cassandra.thrift.ColumnParent;
import org.apache.cassandra.thrift.ColumnPath;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.SlicePredicate;
import org.apache.cassandra.thrift.SliceRange;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;

public class test {
    
public static void main(String[] args) throws Exception, InvalidRequestException, UnavailableException, TimedOutException, TException {        
        
byte[] uuid = asByteArray(getTimeUUID());
        TTransport tr 
= new TSocket("localhost"9160);
        TProtocol proto 
= new TBinaryProtocol(tr);
        Cassandra.Client client 
= new Cassandra.Client(proto);
        tr.open();
        String key_user_id 
= "123";
        
long timestamp = System.currentTimeMillis();
        ColumnPath cp 
=new ColumnPath();
        cp.setColumn(uuid);
        cp.setColumn_family(
"StandardByUUID1");
        client.insert(
"Keyspace1",
                      key_user_id,
                      cp,
                      
"Some thing here".getBytes("UTF-8"),
                      timestamp,
                      ConsistencyLevel.ONE);
        
        SliceRange sr 
= new SliceRange(new byte[0], new byte[0], false10);
        SlicePredicate predicate 
= new SlicePredicate();
        predicate.setSlice_range(sr);
        ColumnParent parent 
= new ColumnParent();
        parent.setColumn_family(
"StandardByUUID1");        
        List
<ColumnOrSuperColumn> results = client.get_slice("Keyspace1", key_user_id, parent, predicate, ConsistencyLevel.ONE);
        
for (ColumnOrSuperColumn result : results)
        {
            Column column 
= result.column;
            System.
out.println(toUUID(column.name).toString() + " -> " + new String(column.value, "UTF-8"));
        }

        tr.close();
        System.out.println("done.");
    }
    
public static java.util.UUID getTimeUUID()
    {
        
return java.util.UUID.fromString(new com.eaio.uuid.UUID().toString());
    }
    
    
public static byte[] asByteArray(java.util.UUID uuid)
    {
        
long msb = uuid.getMostSignificantBits();
        
long lsb = uuid.getLeastSignificantBits();
        
byte[] buffer = new byte[16];

        for (int i = 0; i < 8; i++) {
                buffer[i] 
= (byte) (msb >>> 8 * (7 - i));
        }
        
for (int i = 8; i < 16; i++) {
                buffer[i] 
= (byte) (lsb >>> 8 * (7 - i));
        }

        return buffer;
    }

    public static java.util.UUID toUUID( byte[] uuid )
    {
        
long msb = 0;
        
long lsb = 0;
        assert uuid.length 
== 16;
        
for (int i=0; i<8; i++)
            msb 
= (msb << 8| (uuid[i] & 0xff);
        
for (int i=8; i<16; i++)
            lsb 
= (lsb << 8| (uuid[i] & 0xff);
        
long mostSigBits = msb;
        
long leastSigBits = lsb;
    
        com.eaio.uuid.UUID u 
= new com.eaio.uuid.UUID(msb,lsb);
        
return java.util.UUID.fromString(u.toString());
    }
}

 

 

 使用cassandra-cli查询结果:

 

输出结果:

9a3212f0-7584-11df-9632-001fe210d7db -> Chris Goffinet

fa6685c0-7584-11df-8856-001fe210d7db -> Some thing here 

done. 

抱歉!评论已关闭.