Para uma demonstração simples de como desenvolver um EndPoint de get/set com o Cassandra em .NET, utilizei a biblioteca Aquiles v0.6.4.2 (http://aquiles.codeplex.com/), que mesmo com pouca documentação, permite uma implementação fácil e bem intuitiva.
Por que criarei um EndPoint/WebService? Pois WebServices permitem facil interação com qualquer aplicação independente de plataforma.
O primeiro passo foi adicionar e referenciar as DLLs da biblioteca em um projeto Web Service:

Configurei o web.config, de acordo com meu cenário (onde o Cassandra esta no ‘localhost’, porta 9160):
<configSections>
...
<section name="aquilesConfiguration" type="Aquiles.Configuration.AquilesConfigurationSection,Aquiles"/>
</configSections>
<aquilesConfiguration>
<clusters>
<add friendlyName="LocalCassandra">
<connection poolType="SIZECONTROLLEDPOOL" factoryType="BUFFERED"/>
<endpointManager type="ROUNDROBIN" defaultTimeout="6000">
<cassandraEndpoints>
<add address="localhost" port="9160"/>
</cassandraEndpoints>
</endpointManager>
</add>
</clusters>
</aquilesConfiguration>

E criei um WebService bem simples utilizando o keyspace ToyStore do artigo anterior:
using System;
using System.Web.Services;
namespace CassandraEndPoint
{
using Aquiles.Command;
using Aquiles;
using Aquiles.Helpers.Encoders;
[WebService]
public class wsToyStore : WebService
{
const string cassandraConn = "LocalCassandra";
const string columnFamily = "Toys";
const string keyspace = "ToyStore";
[WebMethod]
public string GetToyColumn(string key, string columnName)
{
AquilesHelper.Initialize();
var cmd = new GetCommand
{
KeySpace = keyspace,
ColumnFamily = columnFamily,
Key = key
};
cmd.ColumnName = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName);
using (var connection = AquilesHelper.RetrieveConnection(cassandraConn))
{
connection.Open();
connection.Execute(cmd);
connection.Close();
}
if (cmd.Output == null)
return string.Empty;
var bytes = cmd.Output.Column.Value;
var value = ByteEncoderHelper.UTF8Encoder.FromByteArray(bytes);
return value;
}
[WebMethod]
public void SetToyColumn(string key, string columnName, string value)
{
AquilesHelper.Initialize();
var cmd = new InsertCommand
{
KeySpace = keyspace,
ColumnFamily = columnFamily,
Key = key
};
cmd.Column =
new Aquiles.Model.AquilesColumn()
{
ColumnName = ByteEncoderHelper.UTF8Encoder.ToByteArray(columnName),
Value = ByteEncoderHelper.UTF8Encoder.ToByteArray(value),
Timestamp = DateTime.Now.Ticks
};
using (var connection = AquilesHelper.RetrieveConnection(cassandraConn))
{
connection.Open();
connection.Execute(cmd);
connection.Close();
}
}
}
}
E como resultado, o método SetToyColumn para inserir ou alterar o valor de uma coluna.

E o método GetToyColumn, para recuperar estes valores:

A biblioteca mais low-level que pode ser encontrada para trabalhar com Apache Cassandra e C# é a Thrift, mas podem ser encontradas outras mais high-level que até têm suporte á LINQ, como a Cassandraemon.
Abaixo a relação de bibliotecas:
Thrift:
http://incubator.apache.org/thrift
Aquiles:
http://aquiles.codeplex.com
Hector Sharp:
http://www.hectorsharp.com
Fluent Cassandra:
http://github.com/managedfusion/fluentcassandra
Cassandraemon:
http://cassandraemon.codeplex.com





















