<<<<<<<<<<<
Courtney Robinson [sabco@live.co.uk]
Hello everyone,
I'm sorry if that has been asked
already, i've just joined the list.
can anyone provide a quick java example
of connecting to cassandra and setting up a keyspace and a column family
using thrift.
I know my way around 0.6 and i'm trying
to get ready to migrate to 0.7 when its stable.
Please and thank you.
<<<<<<<<<<
There is a way to search the email list,
and I must add your question is more a user@cassandra than dev.
Here can you search the email list
http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/
And I have done some experiments with 0.7
and Java so I could provide you with some help. The most interesting news I
think is the secondary indices.
I also post some info a blog on www.justus.st where I format the text a little
better than this =)
New about opening the connection, here the
important thing is to set the framed transport, this is important and is a
change that will be the only option in later versions.
/**
* Open up a new connection to the Cassandra Database.
*
* @return the Cassandra Client
*/
private
static Cassandra.Client newCassandraConnection(String address) throws
TTransportException {
TTransport tr = new
TSocket(adress, 9160);
TFramedTransport tf = new
TFramedTransport(tr);
TProtocol proto = new
TBinaryProtocol(tf);
Cassandra.Client client = new
Cassandra.Client(proto);
tr.open();
return client;
}
In this part it is possible to
set all CF definitions when creating the keyspace, although it is not necessary
so I did it afterwards.
/**
* @param keyspacename
* @param replicafactor
* @throws InvalidRequestException
* @throws TException
*/
public static void createKeySpace(String keyspacename, int replicafactor )
throws InvalidRequestException, TException
{
Cassandra.Client
c = Connection.lendConnection();
try
{
c.describe_keyspace(keyspacename);
System.out.println("Keyspace
already exists");
}
catch
(NotFoundException e)
{
System.out.println("Keyspace
not found, creating new "+ keyspacename);
KsDef
k = new KsDef();
k.setName(keyspacename);
k.setReplication_factor(replicafactor);
k.setStrategy_class("org.apache.cassandra.locator.RackUnawareStrategy");
List<CfDef>
cfDefs = new ArrayList<CfDef>();
k.setCf_defs(cfDefs);
c.system_add_keyspace(k);
}
Connection.returnConnection(c);
}
/**
* @param keyspacename
* @param columnname
* @param columntype
* @param comparatortype
* @param subcomparatortype
* @param row_cache_size
* @param key_cache_size
* @param comment
* @throws InvalidRequestException
* @throws TException
* @throws NumberFormatException
* @throws IOException
*/
public static void createColumnFamily(String keyspacename, String columnname,
String columntype, String comparatortype,
String subcomparatortype, double row_cache_size, double key_cache_size,
String comment)
throws InvalidRequestException, TException, NumberFormatException, IOException
{
CfDef
cdef = new CfDef();
cdef.setColumn_type(columntype);
cdef.setComment(comment);
cdef.setComparator_type(comparatortype);
cdef.setKey_cache_size(key_cache_size);
cdef.setRow_cache_size(row_cache_size);
cdef.setSubcomparator_type(subcomparatortype);
cdef.setKeyspace(keyspacename);
cdef.setName(columnname);
Cassandra.Client
c = Connection.lendConnection();
c.set_keyspace(keyspacename);
c.system_add_column_family(cdef);
Connection.returnConnection(c);
}
/**
* @param keyspacename
* @param columnname
* @param columntype
* @param comparatortype
* @param subcomparatortype
* @param row_cache_size
* @param key_cache_size
* @param comment
* @param listIndexes
* @throws InvalidRequestException
* @throws TException
* @throws NumberFormatException
* @throws IOException
*/
public static void createColumnFamilyWithSecondaryIndices(String keyspacename,
String columnname, String columntype,
String comparatortype, String subcomparatortype,
double row_cache_size,
double key_cache_size, String comment,
ArrayList<SecondaryIndices> listIndexes )
throws InvalidRequestException, TException, NumberFormatException, IOException
{
CfDef
cdef = new CfDef();
cdef.setColumn_type(columntype);
cdef.setComment(comment);
cdef.setComparator_type(comparatortype);
cdef.setKey_cache_size(key_cache_size);
cdef.setRow_cache_size(row_cache_size);
cdef.setSubcomparator_type(subcomparatortype);
cdef.setKeyspace(keyspacename);
cdef.setName(columnname);
for(SecondaryIndices
si : listIndexes)
{
cdef.addToColumn_metadata(si.getCdef());
}
Cassandra.Client
c = Connection.lendConnection();
c.set_keyspace(keyspacename);
c.system_add_column_family(cdef);
Connection.returnConnection(c);
}
public class SecondaryIndices
{
private
ColumnDef cdef;
/**
*
@param columnkey
*
@param indexname
*/
public
SecondaryIndices(byte[] columnkey, String indexname, String validationclass)
{
cdef
= new ColumnDef();
cdef.setIndex_name(indexname);
//borde vara indexnamnet
cdef.setName(columnkey);//borde
vara columnnamnet
cdef.setIndex_type(IndexType.KEYS);
cdef.setValidation_class(validationclass);
}
public
ColumnDef getCdef() {
return
cdef;
}
}
I haven’t tested the
secondary indices yet but I think it is this way it works to create, to get
there is a method called get_indexed_slices(columnParent, clause,
slicePredicate, consistency);
//this is fairly easy to
understand but IndexOperator.. I leave that for now
IndexExpression expr = new IndexExpression(columnkey, IndexOperator.EQ,
columnvalue);
//expr made into a fixed list why I do not know, new byte == startkey and 100
is count. I dont realy know what parameters do yet
IndexClause clause = new IndexClause(Arrays.asList(expr), new byte[]{}, 100);
Hope this helps
Regards
/Justus
AB SVENSKA SPEL
106 10 Stockholm
Sturegatan 11,
Sundbyberg
Växel +46 8 757 77 00
http://svenskaspel.se