2014-05-14 1 views
5

Ich bin auf der Suche nach der richtigen Verwendung des offiziellen Cassandra C# -Treibers (2.0) in einem ASP.NET-Web-API-Projekt - verwendet von einer Website mit hohem Datenverkehr.Korrekter Weg zur Verbindung mit Cassandra in einer Web-/API-App

ich eine sehr einfache Beispielanwendung vorgenommen haben, die db mit den folgenden Klassen zu einem cassandra verbindet:

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"); 
    } 
} 

Und in meinem Controller-Ich verwende es wie folgt aus:

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); 
    } 
} 

Alle Beispiele, Informationen werden sehr hilfreich sein.

Danke.

Antwort

1

Ich denke, Sie sind auf dem richtigen Weg. Hier ist, was ich in der Vergangenheit getan haben:

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; 
    } 
} 

Mit meinem Verbindungsdetails isoliert in meinem CassandraDAO Klasse habe ich dann schreiben einzelne DAOs für jeden Schlüsselraum oder Bereich der Funktionalität. Diese DAOs erben dann die CassandraDAO-Klasse.

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; 
    } 

Es gibt nicht eine ganze Menge offiziellen DataStax-Code für C#. Ich habe dies aus dem, was ich gelernt habe, angepasst, indem ich die Cassandra Java Development-Klasse unter DataStax Academy genommen habe. Offensichtlich habe ich MVC in diesem Beispiel nicht gemacht, aber ich hoffe, es hilft.

+0

Dieser Code sieht so aus, als würde er ** Cluster.Bulder() ** und ** cluster.Connect() ** bei jedem Zugriff auf das ProductsDAO aufrufen - ist das in Ordnung? – Martin

+0

Ich hatte es so, nur um es kurz zu halten. Innerhalb des CassandraDAO können Sie einen geschützten Getter für 'session' haben und ihn nur dann' connect' aufrufen, wenn die Sitzung null ist. Ich werde eine Bearbeitung vornehmen, um dies zu reflektieren. – Aaron

Verwandte Themen