您的位置:首页 > 产品设计 > UI/UE

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的配置

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

}


本文出自 “大型网站应用技术” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐