Pregunta Forma correcta de conectarse a Cassandra en una aplicación web / api


Estoy buscando la forma correcta de usar el controlador oficial Cassandra C # (2.0) en un proyecto de API web ASP.NET, utilizado por un sitio de alto tráfico.

He creado una aplicación de muestra muy simple que se conecta a un db cassandra usando las siguientes clases:

public class CassandraContext
{
    private static ISession _session;
    public ISession Session { get { return _session; } }

    public CassandraContext()
    {
        var cluster = Cluster.Builder().AddContactPoint("cassandra.some.server").Build();
        _session = cluster.Connect("keyspace");
    }
}

Y en mi controlador lo estoy usando así:

public class TestController : ApiController
{
    static CassandraContext db = new CassandraContext();

    public IHttpActionResult Get()
    {
        var result = new List<string>();
        var rowSet = db.Session.Execute(@"SELECT * FROM ""Test"";");

        foreach (var row in rowSet)
            result.Add(row.GetValue<string>("data"));

        return Ok<List<string>>(result);
    }
}

Cualquier ejemplo, la información será muy útil.

Gracias.


6
2018-05-14 09:10


origen


Respuestas:


Creo que estás en el camino correcto. Esto es lo que hice en el pasado:

public class CassandraDAO
{
    private Cluster cluster;
    private Session session;
    private String NODE = ABCServiceTester.Properties.Settings.Default.CASSANDRA_NODE;
    private String USER = ABCServiceTester.Properties.Settings.Default.USERNAME;
    private String PASS = ABCServiceTester.Properties.Settings.Default.PASSWORD;

    public CassandraDAO()
    {
        connect();
    }

    private void connect()
    {
        cluster = Cluster.Builder().WithCredentials(USER, PASS)
            .AddContactPoint(NODE).Build();
        session = cluster.Connect();
    }

    protected Session getSession()
    {
        if (session == null)
        {
            connect();
        }

        return session;
    }
}

Con los detalles de mi conexión aislados en mi clase de CassandraDAO, luego escribo DAO individuales para cada espacio de teclas o área de funcionalidad. Estos DAO heredan la clase CassandraDAO.

public class ProductsDAO : CassandraDAO
{
    public List<Product> getProducts(string _itemID)
    {
        string strCQL = "SELECT priceAvail, productGroup, productSpec, sizeProfile "
            + "FROM products.itemsmaster "
            + "WHERE itemID=?";
        Session localSession = getSession();
        PreparedStatement statement = localSession.Prepare(strCQL);
        BoundStatement boundStatement = new BoundStatement(statement);
        boundStatement.Bind(_itemID);

        //get result set from Cassandra
        RowSet results = localSession.Execute(boundStatement);

        List<Product> returnVal = new List<Product>();

        foreach (Row row in results.GetRows())
        {
            Product tempProd = new Product();
            tempProd.itemID= _itemID;
            tempProd.priceAvail = row.GetValue<int>("priceavail");
            tempProd.productGroup = row.GetValue<string>("productgroup");
            tempProd.productSpec = row.GetValue<string>("productspec");
            tempProd.sizeProfile = row.GetValue<string>("sizeprofile");

            returnVal.Add(tempProd);
        }

        return returnVal;
    }

No hay mucho código oficial de DataStax para C #. Lo adapté a partir de lo que aprendí tomando la clase de desarrollo Java de Cassandra Academia DataStax. Obviamente, no estaba haciendo MVC en este ejemplo, pero espero que ayude.


2
2018-05-15 15:54