`
a80317
  • 浏览: 8612 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类

How to insert SuperColumn into Cassandra with Java

阅读更多
These days I am studying Cassandra and want to insert the SuperColumn into Cassandra with hector, which is high level Java API for Cassandra.I can't find an good example about the issue. Tons of folks are also asking the same question. So I write this example. May it help you.

There are 2 approaches to insert super column. One is using ColumnPath by setting super column name, the other is using batch_insert method. Here my code is:


package com.wwj.cassandra.test;

import static me.prettyprint.cassandra.utils.StringUtils.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnPath;
import org.apache.cassandra.thrift.SuperColumn;

import me.prettyprint.cassandra.dao.Command;
import me.prettyprint.cassandra.service.Keyspace;

public class SuperColumnUtils {
    private static int port = 9160;

    private static String keyspace = "Keyspace1";
    private static String cassandraServer = "10.240.70.60";
    private static String superColumnFamily = "Super2";

    public static void main(String[] args) throws Exception {
	
	
	SuperColumnUtils.insertSuperColumn("20100719", "L.A", "BigNews", "Join Kobe's Summer Camp");
	SuperColumnUtils.insertSuperColumn("20100719", "L.A", "Weather", "Hot");
	
	SuperColumn sc = SuperColumnUtils.getSuperColumn("20100719", "L.A");
	
	SuperColumnUtils.insertSuperColumn("20100719", "AppleCity", "BigNews", "Why Lebron won't come");
	SuperColumnUtils.insertSuperColumn("20100719", "AppleCity", "Weather", "Rain");
	
	sc = SuperColumnUtils.getSuperColumn("20100719", "AppleCity");
	
	/*
	 * 
	 * Use Cassandra command line to do query. The result is like the
	 * following: 
	 * Cassandra> get Keyspace1.Super2['20100719'] 
	 * =>    (super_column=L.A, 
	 *             (column=BigNews, value=Join Kobe's Summer Camp, timestamp=1279529604122000) 
	 *             (column=Weather, value=Hot, timestamp=1279529604153000)) 
	 * =>    (super_column=AppleCity,
	 *             (column=BigNews, value=Why Lebron won't come,timestamp=1279529604169000) 
	 *             (column=Weather, value=Rain, timestamp=1279529604169000)) 
	 * Returned 2 results.
	 */

	SuperColumn superColumn = new SuperColumn();
	superColumn.setName(bytes("Boston"));
	superColumn.addToColumns(new Column(bytes("BigNews"), bytes("Celtics re-signed Paul Pierce"), System.currentTimeMillis()));
	superColumn.addToColumns(new Column(bytes("Weather"), bytes("Cold"), System.currentTimeMillis()));
	
	SuperColumnUtils.batchInsertSuperColumn("20100719", superColumn);
	
	sc = SuperColumnUtils.getSuperColumn("20100719", "Boston");

    }

    /**
     * Insert one column for a SuperColumn by specifying the ColumnPath
     * You need call the method many times if a super column has more than one column.
     * @param key
     *            - the value of key
     * @param superColumnNam
     *            - The name of SuperColumn
     * @param columnName
     *            - The column name to be inserted.
     * @param value
     *            - The value of column to be inserted.
     * @throws Exception
     */
    public static void insertSuperColumn(final String key, final String superColumnName, final String columnName,
	    final String value) throws Exception {
	execute(new Command<Void>() {
	    public Void execute(Keyspace ks) throws Exception {
		ks.insert(key, createSupercolumnPath(columnName, superColumnName), bytes(value));
		return null;
	    }

	});

    }
    
    /**
     * Insert all columns of a super column at the same time.
     * @param key - the value of key.
     * @param superColumn - a super column
     * @throws Exception
     */
    public static void  batchInsertSuperColumn(final String key, final SuperColumn superColumn) throws Exception{
	execute(new Command<Void>() {
	    public Void execute(Keyspace ks) throws Exception {
		//Key is the name of super column
		Map<String, List<SuperColumn>> superColumnMap = new HashMap<String, List<SuperColumn>>();
		List<SuperColumn> list = new ArrayList(1);
		list.add(superColumn);
		superColumnMap.put(superColumnFamily, list);
		
		ks.batchInsert(key, null, superColumnMap);
		return null;
	    }
	    
	});
    }
    

    public static SuperColumn getSuperColumn(final String key, final String superColumnName) throws Exception {
	SuperColumn sc = execute(new Command<SuperColumn>() {
	    public SuperColumn execute(Keyspace ks) throws Exception {
		ColumnPath columnPath = new ColumnPath(superColumnFamily);
		columnPath.setSuper_column(bytes(superColumnName));

		return ks.getSuperColumn(key, columnPath);
	    }

	});
	printSuperColumn(sc);
	return sc;
    }

    private static <T> T execute(Command<T> command) throws Exception {
	return command.execute(cassandraServer, port, keyspace);
    }

    private static ColumnPath createSupercolumnPath(String columnName, String superColumn) {
	ColumnPath columnPath = new ColumnPath(superColumnFamily);
	columnPath.setColumn(bytes(columnName));
	columnPath.setSuper_column(bytes(superColumn));

	return columnPath;
    }

    private static void printSuperColumn(SuperColumn sc) {
	System.out.println("super_column=" + string(sc.getName()) + ", (");
	List<Column> columns = sc.getColumns();
	for (Column column : columns) {
	    System.out.println("    column=" + string(column.getName()) + ", value=" + string(column.getValue())
		    + ", timestamp=" + column.getTimestamp());

	}
	System.out.println(")");
    }
}






分享到:
评论

相关推荐

    cassandra 插入superColumn

    INSERT INTO keyspace.SuperColumnFamily (super_column_name, column_name) VALUES ('UserInfo', 'FirstName') WITH VALUE = 'John'; ``` 这将向`SuperColumnFamily`的`UserInfo` SuperColumn插入一个名为`...

    cassandra入门demo

    INSERT INTO users (user_id, name, email) VALUES (uuid(), '张三', 'zhangsan@example.com'); ``` 这里我们创建了一个名为`users`的表,包含用户ID(主键)、姓名和电子邮件字段,并插入了一条测试数据。 **6. ...

    Cassandra的数据模型介绍

    amily 是 Cassandra 数据模型的核心组成部分,用来组织和管理 Column 和 SuperColumn。在 Cassandra 中,一个 ColumnFamily 相当于传统数据库中的表,但它不遵循严格的行与列的关系,而是以键值对的形式存储数据,...

    Cassandra使用手册

    对于开发人员,Cassandra提供了一个简单的Java编程接口Thrift,可以用来在Java应用程序中访问Cassandra。Thrift接口的工作流程通常包括准备工作、数据库连接、数据操作(包括插入和查询)等步骤。数据插入分为单条...

    cassandra cli 命令 大全

    Cassandra CLI是Apache Cassandra数据库系统的一个命令行工具,它提供了与Cassandra集群交互的能力,包括连接到远程节点、创建或更新模式(schema)、设置和检索记录及列,以及查询节点和集群元数据。这个工具主要...

    cassandra介绍

    Hector 是一个 Java 客户端库,用于与 Cassandra 交互。它提供了简单的 API 来执行常见的 CRUD 操作,并且支持异步操作,提高了应用程序的响应速度和效率。 #### 九、总结 Apache Cassandra 作为一款高度可扩展、...

    Cassandra架构与应用

    Cassandra采用了一种基于列族(Column Families)的数据模型,其中包含了Column、SuperColumn、ColumnFamily、Keyspaces、Row等核心概念。每个Keyspace可视为一个独立的命名空间,包含多个ColumnFamily。Row则是在...

    cassandra教程

    【Cassandra教程】 Cassandra是一种非关系型数据库(NoSQL),设计为分布式Key-Value存储系统,由Facebook基于Google的Bigtable设计实现,并在Apache软件基金会下开发维护。Cassandra的特点在于其高度分布式、模式...

    apache-cassandra-1.2.5

    9. **JMX监控**:通过Java Management Extensions (JMX),用户可以监控Cassandra的运行状态。1.2.5可能增强了JMX接口,提供了更多监控指标,方便运维人员进行故障排查和性能优化。 10. **备份与恢复**:1.2.5版本...

    java-cassandra-quickstart:Java 和 Cassandra 快速入门 (Astyanax + CQL)

    Java 和 Cassandra 快速入门是针对开发者的一个指南,旨在帮助他们快速掌握如何使用 Java 集成 Cassandra 数据库,特别是通过 Astyanax 客户端和 CQL(Cassandra 查询语言)进行操作。Cassandra 是一种分布式 NoSQL ...

    cassandra 最新文档

    Cassandra提供了多种API供应用程序使用,包括CQL(Cassandra Query Language)和其他编程语言的驱动程序,如Java、Python等,方便开发者进行数据交互。 【性能测试和比较】 Cassandra的性能测试通常涉及读写速度、...

    reactivecassandra:React式Cassandra编程示例

    Cassandra的数据模型基于列族(ColumnFamily)和超级列(SuperColumn)。每个表(Keyspace)由多个列族组成,列族内包含行(Row),行由列(Column)组成。列族可以视为关系数据库中的表,行则是记录,列是记录中的...

    Cassandra在360的实践与改进(22页).pdf

    1. 数据模型:Cassandra采用键值对存储,支持ColumnFamily、SuperColumn和Column。其数据模型设计灵活,适合大规模数据存储。 2. 分布式架构:Cassandra基于一致性哈希,实现去中心化的数据分布,保证了系统的可扩展...

    [NOSQL] Cassandra 数据库系统简单介绍.doc

    此外,Cassandra 还支持 SuperColumn,它是一个 Column 的集合,提供了一种层次化的数据结构。 Cassandra 的架构是完全分布式且基于 P2P 的,使用 O(1)DHT(分布式哈希表)实现,这意味着数据分散在网络中的各个...

    超级Column游戏

    运行游戏只需执行SuperColumn.exe 文件即可,没有SuperColumn.sav与SuperColumn.dat文件也可,它会自动在当前目录分别创建一个,另外,在当前目录下还需要动画鼠标ButterFly.ani,若没有就调用系统缺省的箭头鼠标,...

    关于NoSQL的一些概要知识

    - **SuperColumn**:一种特殊的列,用于组织相关的列集合。 - **Sorting**:支持按列排序。 - **存储**:采用行式和列式混合存储的方式。 - **API**:提供了多种语言的客户端API。 ##### 2. MongoDB - **特性**:...

    NoSQL数据库笔谈

    - Supercolumn: 一个包含多个子列的列。 - Sorting: 数据排序方式。 ##### 4. MongoDB - **特点**: 面向文档的数据库,易于开发人员使用。 - **数据模型**: 支持嵌套结构的数据存储。 ##### 5. Redis - **介绍**...

Global site tag (gtag.js) - Google Analytics