Thrift生成出的代码因为没有连接池,是无法用于生产环境的,所以我们必须利用带有连接池的第三方的.NET组件进行生产环境程序的开发,这里我推荐Aquiles,其它语言的高级客户端可参考这里:
http://wiki.apache.org/cassandra/ClientOptions
Aquiles的配置和代码,必须注意的是,代码和以前0.7.x的代码有很大差别,以前的代码是不能去访问Cassandra 1.0.0的
Web.config的配置
- <?xml version="1.0"?>
- <configuration>
- <!-- 必须的配置,用于声明配置的节点 -->
- <configSections>
- <section name="aquilesConfiguration" type="Aquiles.Core.Configuration.AquilesConfigurationSection,Aquiles.Core"/>
- </configSections>
- <aquilesConfiguration>
- <!-- 非必须,用于配置出错日志 -->
- <loggingManager>Aquiles.Core.Diagnostics.Impl.TraceLogger,Aquiles.Core</loggingManager>
- <clusters>
- <!-- 必须,代码中调用的Cluster的名称必须与这个一致 -->
- <add friendlyName="TestCluster1">
- <connection poolType="SIZECONTROLLEDPOOL" factoryType="FRAMED">
- <!--<connection poolType="NOPOOL" factoryType="FRAMED">-->
- <specialConnectionParameters>
- <add key="minimumClientsToKeepInPool" value="3"/>
- <add key="maximumClientsToSupportInPool" value="1000"/>
- <add key="magicNumber" value="7"/>
- <add key="transportBufferSize" value="5000"/>
- </specialConnectionParameters>
- </connection>
- <endpointManager type="ROUNDROBIN" defaultTimeout="6000">
- <cassandraEndpoints>
- <!-- 必须,Cassandra的IP地址和端口 -->
- <add address="192.168.220.129" port="9160"/>
- </cassandraEndpoints>
- </endpointManager>
- </add>
- </clusters>
- </aquilesConfiguration>
- <system.diagnostics>
- <trace autoflush="true" indentsize="2">
- <listeners>
- <remove name="Default"/>
- <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="d:\trace.log"/>
- </listeners>
- </trace>
- </system.diagnostics>
- <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
- public long InsertData()
- {
- Aquiles.Helpers.Encoders.UTF8EncoderHelper utf8Encoder = new Aquiles.Helpers.Encoders.UTF8EncoderHelper();
- ICluster cluster = AquilesHelper.RetrieveCluster(CLUSTERNAME);
- long timestamp = DateTime.Now.Ticks;
- byte[] key = ByteEncoderHelper.UTF8Encoder.ToByteArray(timestamp.ToString());
- byte[] columnName = ByteEncoderHelper.UTF8Encoder.ToByteArray("timestamp");
- byte[] columnValue = ByteEncoderHelper.LongEncoder.ToByteArray(timestamp);
- ColumnParent columnParent = new ColumnParent()
- {
- Column_family = COLUMNFAMILYNAME,
- };
- Column columnData = new Column()
- {
- Name = columnName,
- Timestamp = UnixHelper.UnixTimestamp,
- Value = columnValue,
- };
- // inserting data
- cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
- {
- client.insert(key, columnParent, columnData, ConsistencyLevel.ONE);
- return null;
- }), KEYSPACENAME);
- return timestamp;
- }
- public long GetData(string keyString)
- {
- long result = long.MinValue;
- Aquiles.Helpers.Encoders.UTF8EncoderHelper utf8Encoder = new Aquiles.Helpers.Encoders.UTF8EncoderHelper();
- ICluster cluster = AquilesHelper.RetrieveCluster(CLUSTERNAME);
- byte[] key = ByteEncoderHelper.UTF8Encoder.ToByteArray(keyString);
- byte[] columnName = ByteEncoderHelper.UTF8Encoder.ToByteArray("timestamp");
- byte[] columnValue = ByteEncoderHelper.UTF8Encoder.ToByteArray(Guid.NewGuid().ToString());
- ColumnPath columnPath = new ColumnPath()
- {
- Column = columnName,
- Column_family = COLUMNFAMILYNAME,
- };
- ColumnOrSuperColumn columnOrSuperColumn = null;
- // getting inserted data
- cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
- {
- columnOrSuperColumn = client.get(key, columnPath, ConsistencyLevel.ONE);
- return columnOrSuperColumn;
- }), KEYSPACENAME);
- result = ByteEncoderHelper.LongEncoder.FromByteArray(columnOrSuperColumn.Column.Value);
- return result;
- }
- public void DeleteData(string keyString)
- {
- Aquiles.Helpers.Encoders.UTF8EncoderHelper utf8Encoder = new Aquiles.Helpers.Encoders.UTF8EncoderHelper();
- ICluster cluster = AquilesHelper.RetrieveCluster(CLUSTERNAME);
- byte[] key = ByteEncoderHelper.UTF8Encoder.ToByteArray(keyString);
- byte[] columnName = ByteEncoderHelper.UTF8Encoder.ToByteArray("timestamp");
- byte[] columnValue = ByteEncoderHelper.UTF8Encoder.ToByteArray(Guid.NewGuid().ToString());
- ColumnPath columnPath = new ColumnPath()
- {
- Column = columnName,
- Column_family = COLUMNFAMILYNAME,
- };
- cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
- {
- client.remove(key, columnPath,UnixHelper.UnixTimestamp, ConsistencyLevel.ONE);
- return null;
- }), KEYSPACENAME);
- }
- public string CQLTest()
- {
- string cql = "select * from TestColumnFamily ";
- string result="";
- Aquiles.Helpers.Encoders.UTF8EncoderHelper utf8Encoder = new Aquiles.Helpers.Encoders.UTF8EncoderHelper();
- ICluster cluster = AquilesHelper.RetrieveCluster(CLUSTERNAME);
- byte [] query=utf8Encoder.ToByteArray(cql);
- // getting inserted data
- CqlResult cqlResult=null;
- cluster.Execute(new ExecutionBlock(delegate(CassandraClient client)
- {
- cqlResult= client.execute_cql_query(query, Compression.NONE);
- return cqlResult;
- }), KEYSPACENAME);
- result = utf8Encoder.FromByteArray(cqlResult.Rows[0].Columns[0].Value);
- return result;
- }