记录生活

FluentCassandra初体验

<Category: nosql> 查看评论

FluentCassandra是C#实现的Cassandra的客户端,我来试试看。
英文原文:http://coderjournal.com/2010/06/your-first-fluent-cassandra-application/

第一步,Cassandra准备工作,略。

第二步,Cassandra配置Keyspace,打开cassandra配置文件storage-conf.xml,输入如下Keyspace信息(博客的简单存储):

<Keyspace Name="Blog">
    <ColumnFamily Name="Posts"
        ColumnType="Super"
        CompareWith="UTF8Type"
        CompareSubcolumnsWith="UTF8Type" />
    <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy>
    <ReplicationFactor>1</ReplicationFactor>
    <EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
</Keyspace>

第三步,保存启动Cassandra。
第四步,下载FluentCassandra,位置http://github.com/managedfusion/fluentcassandra
第五步,新建工程,引用FluentCassandra(注意vs版本为2010),以下是主要的测试代码:

using System;
using System.Linq;
using FluentCassandra;
using FluentCassandra.Types;
 
namespace TestClient
{
	internal class Program
	{
		private static void Main(string[] args)
		{
			using (var db = new CassandraContext(keyspace: "Blog", host: "localhost"))
			{
				CassandraSuperColumnFamily<UTF8Type, UTF8Type> family = db.GetColumnFamily<UTF8Type, UTF8Type>("Posts");
 
				dynamic post = family.CreateRecord("first-blog-post");
				dynamic post_details = post.CreateSuperColumn();
				post_details.Title = "hello";
				post_details.Body = "this is my body";
				post_details.Author = "medcl";
				post_details.PostOn = DateTime.Now;
 
				dynamic tags = post.CreateSuperColumn();
				tags[0] = "cassandra";
				tags[1] = "tutorial";
				tags[2] = "NOSQL";
				tags[3] = "database";
 
				post.Details = post_details;
				post.Tags = tags;
 
				db.Attach(post);
 
				db.SaveChanges();
 
//here we get the result
				dynamic getPost = family.Get("first-blog-post").FirstOrDefault();
				dynamic get_post_detail = getPost.Details;
				Console.WriteLine(
					string.Format("{0}-{1}:{2},Context:{3}", get_post_detail.Title, get_post_detail.Author,
					              (DateTime) get_post_detail.PostOn, get_post_detail.Body)
					);
				Console.WriteLine("Tags:");
				dynamic tagz = getPost.Tags;
				foreach (dynamic tag in tagz)
					Console.Write(String.Format("{0}:{1},", tag.ColumnName, tag.ColumnValue));
 
				Console.Read();
			}
		}
	}
}

第六步,检测数据是否已经存进Cassandra,打开Cassandra-cli,查询我们的键值(first-blog-post),输入命令:get Blog.Posts['first-blog-post']
返回结果:

cassandra> get Blog.Posts['first-blog-post']
=> (super_column=Tags,
     (column=0, value=cassandra, timestamp=634123696172935592)
     (column=1, value=tutorial, timestamp=634123696173175592)
     (column=2, value=NOSQL, timestamp=634123696173385592)
     (column=3, value=database, timestamp=634123696173595592))
=> (super_column=Details,
     (column=Author, value=medcl, timestamp=634123696172175592)
     (column=Body, value=this is my body, timestamp=634123696171825592)
     (column=PostOn, value=?w#dg?, timestamp=634123696172625592)
     (column=Title, value=hello, timestamp=634123696170405592))
Returned 2 results.

说明成功通过FluentCassandra对Cassandra进行了数据的操作。
第七步,通过FluentCassandra查询获取数据,代码:

//here we get the result
dynamic getPost = family.Get("first-blog-post").FirstOrDefault();
dynamic get_post_detail = getPost.Details;
Console.WriteLine(
	string.Format("{0}-{1}:{2},Context:{3}",get_post_detail.Title,get_post_detail.Author,(DateTime)get_post_detail.PostOn,get_post_detail.Body)
	);
Console.WriteLine("Tags:");
var tagz = getPost.Tags;
foreach (var tag in tagz)
	Console.Write(String.Format("{0}:{1},",tag.ColumnName, tag.ColumnValue));
 
Console.Read();

输出内容:

hello-medcl:2010/6/18 10:19:59,Context:this is my body
Tags:
0:cassandra,1:tutorial,2:NOSQL,

本文来自: FluentCassandra初体验



发表评论