Cassandra 1.0.0 参考(4) .NET客户端的编码,使用Aquiles
2011-10-27 17:08
323 查看
Thrift生成出的代码因为没有连接池,是无法用于生产环境的,所以我们必须利用带有连接池的第三方的.NET组件进行生产环境程序的开发,这里我推荐Aquiles,其它语言的高级客户端可参考这里:
http://wiki.apache.org/cassandra/ClientOptions
Aquiles的配置和代码,必须注意的是,代码和以前0.7.x的代码有很大差别,以前的代码是不能去访问Cassandra 1.0.0的
Web.config的配置
Aquiles的插入操作
Aquiles的Get操作
Aquiles的删除操作
CQL的使用示例
本文出自 “大型网站应用技术” 博客,转载请与作者联系!
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>
Aquiles的插入操作
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; }
Aquiles的Get操作
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; }
Aquiles的删除操作
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); }
CQL的使用示例
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; }
本文出自 “大型网站应用技术” 博客,转载请与作者联系!
相关文章推荐
- Microsoft ASP.NET Futures (July 2007)中History在客户端的使用(即不必安装ASP.NET Futures)
- 附录A 使用ASP.NET AJAX JavaScript Class Browser查看客户端类型
- ASP.NET AJAX 以及AJAXPRO使用客户端调用服务器端的方法--初学者学习
- 使用ASP.Net WebAPI构建REST服务(五)——客户端
- 使用Qt将一系列图片通过网络发送到客户端动态显示的参考代码(修改一下可以用作远程网络监控)
- ASP.NET MVC验证 - 使用哪种方式实现客户端服务端双重异步验证
- Cassandra 1.0.0 参考(3) Column的定义
- Infragistics NetAdvantage 2012 vol2 + VS2012的使用与客户端部署
- 使用 ExtJS 实现 ASP.NET MVC 2 客户端验证
- asp.net中ajax使用(客户端调用服务端方法)
- NetAdvantage asp.net ——使用WebDateChooser在客户端验证开始日期与结束日期
- Cutting Edge:使用客户端行为扩展ASP.NET DataGrid 控件
- 使用ASP.NETAtlasPageNavigator控件实现客户端分页导航
- 未安装Oracle客户端的服务器上,使用ASP.NET远程连接Oracle
- 使用ASP.NET 3.5 Extensions管理浏览器历史:使用客户端
- DevExpress ASP.NET 使用经验谈(9)-Dev控件客户端事件 ClientSideEvents
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
- 教你50招提升ASP.NET性能(八):检查你使用了什么客户端脚本
- asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题
- Microsoft ASP.NET Futures (July 2007)中History在客户端的使用(即不必安装ASP.NET Futures)