在.net中使用aquiles访问Cassandra(四)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 在.net中使用aquiles访问Cassandra(四)

在.net中使用aquiles访问Cassandra(四)

 2013/7/30 23:09:45  协思  博客园  我要评论(0)
  • 摘要:数据的持久化我们都已经完成了,和所有应有程序一样,最重要的是要向用户展示数据。下面我们就推出这部分代码,读取任意行任何列:publicIList<TRowResult>ExecuteRowListResult(stringcolumnFamily,IList<string>rowKeys,IList<string>columnNames){if(string.IsNullOrWhiteSpace(columnFamily)
  • 标签:.net 使用 net Cassandra

数据的持久化我们都已经完成了,和所有应有程序一样,最重要的是要向用户展示数据。下面我们就推出这部分代码,读取任意行任何列:

        public IList<TRowResult> ExecuteRowListResult(string columnFamily, IList<string> rowKeys, IList<string> columnNames)
        {
            if (string.IsNullOrWhiteSpace(columnFamily)) throw new ArgumentNullException("columnFamily");

            List<byte[]> keys = rowKeys.Select(rowKey => ByteEncoderHelper.UTF8Encoder.ToByteArray(rowKey)).ToList();
            ColumnParent columnPath = new ColumnParent()
            {
                Column_family = columnFamily,
            };

            SlicePredicate sp = null;
            if (columnNames == null || columnNames.Count == 0)
            {
                sp = new SlicePredicate()
                {
                    Slice_range = new SliceRange
                    {
                        Count = int.MaxValue,
                        Reversed = false,
                        Start = new byte[0],
                        Finish = new byte[0]
                    },
                };
            }
            else
            {
                sp = new SlicePredicate()
                {
                    Column_names = columnNames.Select(c => ByteEncoderHelper.UTF8Encoder.ToByteArray(c)).ToList()
                };
            }

            Dictionary<byte[], List<ColumnOrSuperColumn>> queryResult = _cluster.Execute(new ExecutionBlock(delegate(Apache.Cassandra.Cassandra.Client client)
            {
                return client.multiget_slice(keys, columnPath, sp, _consistencyLevel);
            }), _keyspaceName) as Dictionary<byte[], List<ColumnOrSuperColumn>>;


            if (queryResult != null && queryResult.Count > 0)
            {
                IList<TRowResult> rows = new List<TRowResult>();
                foreach (var dic in queryResult)
                {
                    if (dic.Value.Count == 0) continue;

                    TRowResult trow = new TRowResult();
                    trow.Row = ByteEncoderHelper.UTF8Encoder.FromByteArray(dic.Key);
                    trow.Columns = new Dictionary<string, TCell>();
                    foreach (ColumnOrSuperColumn column in dic.Value)
                    {
                        string name = ByteEncoderHelper.UTF8Encoder.FromByteArray(column.Column.Name);
                        string value = ByteEncoderHelper.UTF8Encoder.FromByteArray(column.Column.Value);
                        trow.Columns.Add(name, new TCell()
                        {
                            ColumnName = name,
                            Value = value,
                            Timestamp = column.Column.Timestamp
                        });
                    }
                    rows.Add(trow);
                }

                return rows;
            }

            return null;
        }

 

发表评论
用户名: 匿名