NoSQL – Apache Cassandra e C#

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

Anúncios

2 pensamentos sobre “NoSQL – Apache Cassandra e C#

  1. Adorei a matéria!
    Estou fazendo TCC sobre Banco de dados NoSQL e me ajudou muito! Com certeza recomendo.
    Só gostaria de saber mais sobre o Cassandraemon. Se tiver mais alguma informação, ou sites onde posso encontrar mais informações. Agradeço!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s