`

使用hector操作Cassandra

    博客分类:
  • J2EE
 
阅读更多

 

http://rantav.github.com/hector/build/html/content/getting_started.html

https://github.com/zznate/hector-examples.git

 

 


private static final String DYN_KEYSPACE = "logdb";
	private static final String DYN_CF = "user";

	private static StringSerializer stringSerializer = StringSerializer.get();
	private static LongSerializer longSerializer = LongSerializer.get();
	private static Cluster cluster = HFactory.getOrCreateCluster(
			"Test Cluster", "localhost:9160");

	public static void createSchema() {

		try {
			if (cluster.describeKeyspace(DYN_KEYSPACE) != null) {
				cluster.dropKeyspace(DYN_KEYSPACE);
			}

			// 字段操作
			BasicColumnDefinition ageColumnDefinition = new BasicColumnDefinition();
			ageColumnDefinition.setName(stringSerializer.toByteBuffer("age"));
			ageColumnDefinition.setIndexName("age_idx");
			ageColumnDefinition.setIndexType(ColumnIndexType.KEYS);
			ageColumnDefinition.setValidationClass(ComparatorType.LONGTYPE
					.getClassName());

			// 字段操作
			BasicColumnDefinition usernameColumnDefinition1 = new BasicColumnDefinition();
			usernameColumnDefinition1.setName(stringSerializer
					.toByteBuffer("username"));
			usernameColumnDefinition1.setIndexName("username_idx");
			usernameColumnDefinition1.setIndexType(ColumnIndexType.KEYS);
			usernameColumnDefinition1
					.setValidationClass(ComparatorType.UTF8TYPE.getClassName());

			BasicColumnFamilyDefinition columnFamilyDefinition = new BasicColumnFamilyDefinition();
			columnFamilyDefinition.setKeyspaceName(DYN_KEYSPACE);
			columnFamilyDefinition.setName(DYN_CF);
			columnFamilyDefinition.addColumnDefinition(ageColumnDefinition);
			columnFamilyDefinition
					.addColumnDefinition(usernameColumnDefinition1);

			ColumnFamilyDefinition cfUser = new ThriftCfDef(
					columnFamilyDefinition);

			KeyspaceDefinition keyspaceDefinition = HFactory
					.createKeyspaceDefinition(DYN_KEYSPACE,
							"org.apache.cassandra.locator.SimpleStrategy", 1,
							Arrays.asList(cfUser));

			cluster.addKeyspace(keyspaceDefinition);

			// insert some data

			for (int i = 0; i < 1; i++) {
				List<KeyspaceDefinition> keyspaces = cluster
						.describeKeyspaces();
				for (KeyspaceDefinition kd : keyspaces) {
					if (kd.getName().equals(DYN_KEYSPACE)) {
						System.out.println("Name: " + kd.getName());
						System.out.println("RF: " + kd.getReplicationFactor());
						System.out.println("strategy class: "
								+ kd.getStrategyClass());
						List<ColumnFamilyDefinition> cfDefs = kd.getCfDefs();
						for (ColumnFamilyDefinition def : cfDefs) {
							System.out.println("  CF Type: "
									+ def.getColumnType());
							System.out.println("  CF Name: " + def.getName());
							System.out.println("  CF Metadata: "
									+ def.getColumnMetadata());

						}

					}
				}
			}

		} catch (HectorException he) {
			he.printStackTrace();
		}
		cluster.getConnectionManager().shutdown();
	}

	public static void operatioinDB() {
		String value = "";
		for (int i = 0; i < 10; i++) {
			value = value + "x";
		}

		Keyspace keyspaceOperator = HFactory.createKeyspace("logdb", cluster);

		try {
			Mutator<String> userMutator = HFactory.createMutator(
					keyspaceOperator, stringSerializer);

			Long age = 1000L;
			long start = System.currentTimeMillis();
			for (long i = 0; i < 10000 * 10000; i++) {
				userMutator.addInsertion("" + i, "user",
						HFactory.createStringColumn("username", "小贩" + i))
						.addInsertion(
								"" + i,
								"user",
								HFactory.createColumn("age", i,
										stringSerializer, longSerializer));
				if (i % 500 == 0) {
					System.out.println(i);
					userMutator.execute();
				}

			}
			userMutator.execute();
			System.out.println("消耗毫秒:" + (System.currentTimeMillis() - start));

		} catch (HectorException e) {
			e.printStackTrace();
		}
		cluster.getConnectionManager().shutdown();
	}

	public static void query() {
		Keyspace keyspaceOperator = HFactory.createKeyspace("logdb", cluster);
		long value = RandomUtils.nextInt(10000 * 1);
		ColumnFamilyTemplate<String, String> columnFamilyTemplate = new ThriftColumnFamilyTemplate<String, String>(
				keyspaceOperator, "user", stringSerializer, stringSerializer);
		IndexedSlicesPredicate<String, String, Long> agePredicate = new IndexedSlicesPredicate<String, String, Long>(
				stringSerializer, stringSerializer, longSerializer);
		IndexedSlicesPredicate<String, String, String> usernamePredicate = new IndexedSlicesPredicate<String, String, String>(
				stringSerializer, stringSerializer, stringSerializer);
		usernamePredicate.addExpression("username", IndexOperator.EQ,
				"小贩" + value).startKey("");
		agePredicate.addExpression("age", IndexOperator.EQ, value).startKey("");
		ColumnFamilyResult<String, String> list = columnFamilyTemplate
				.queryColumns(usernamePredicate);
		System.out.println(list.getString("username"));
		list = columnFamilyTemplate.queryColumns(agePredicate);
		System.out.println(list.getLong("age"));
		// ======================================================================================

	}

	public static void query2() {
		Keyspace keyspaceOperator = HFactory.createKeyspace("logdb", cluster);
		long value = RandomUtils.nextInt(10000 * 1);
		IndexedSlicesQuery<String, String, String> indexedSlicesQuery = HFactory
				.createIndexedSlicesQuery(keyspaceOperator, stringSerializer,
						stringSerializer, stringSerializer);
		indexedSlicesQuery.addEqualsExpression("username", "小贩" + value);
		indexedSlicesQuery.setColumnFamily("user");
		indexedSlicesQuery.setStartKey("");

		indexedSlicesQuery.setColumnNames("username", "age");
		QueryResult<OrderedRows<String, String, String>> result = indexedSlicesQuery
				.execute();
		System.out.println(result.get());

	}

	public static void main(String[] args) throws Exception {
		query2();
	}
 
分享到:
评论
1 楼 di1984HIT 2014-05-30  
谢谢,写的不错。

相关推荐

    java NoSql Cassandra hector

    本文将深入探讨如何使用Java通过Hector库来操作Cassandra数据库。 Cassandra概述: Cassandra是由Facebook开发,后来贡献给Apache的一个开源分布式数据库系统。它的设计目标是处理大量数据,并提供高可用性和水平...

    hector client guide

    Hector 是一个 Java 客户端库,用于简化 Apache Cassandra 的使用。它提供了一系列高级功能,如连接池管理、故障检测与恢复、基本负载均衡等,这些功能在原生的 Cassandra Java API 中并未直接提供。对于刚接触 ...

    Cassandra-examples

    标题"Cassandra-examples"指的是一个关于使用Java编程语言通过...通过深入学习这些示例,开发者不仅可以掌握Cassandra的基本操作,还能了解到如何在实际项目中使用Hector,提升其在大数据处理和分布式存储领域的技能。

    cassandra介绍

    Cassandra 使用 Memtable 和 SSTable 来存储数据。当写入操作发生时,首先会在 CommitLog 中记录,随后数据会被写入到对应的 Memtable 中。Memtable 是一种按 key 排序的内存结构,当其达到一定大小后,会被刷新到...

    hector-object-mapper-3.1-07.zip

    对象映射器是Hector中的一个重要组件,它允许开发人员使用面向对象的方式来操作数据库,而不是直接编写CQL(Cassandra查询语言)。 描述中的"updates-r-simple.zip, Java自动更新系统,无框架和签名"可能是指一个名...

    apache-cassandra-3.5-bin.tar

    6. **导入数据**:使用CQL或者第三方工具(如cqlsh、Astyanax、 Hector等)进行数据导入。 7. **监控和调整**:定期检查节点状态,监控性能指标,根据需求调整副本数量、缓存大小等配置。 总的来说,Apache ...

    非关系型数据库—Cassandra

    为了提高读写性能,Cassandra使用了Memtable和SSTable两种数据结构,以及Bloom Filter来避免不必要的磁盘I/O。 **Cassandra的查询语言CQL** Cassandra Query Language(CQL)是Cassandra提供的一种类似SQL的查询...

    cassandra:Apache Cassandra的镜像

    5. ** Tombstones**:Cassandra 使用 Tombstones 来标记已删除的数据,而不是立即清除,以避免删除操作的复杂性和数据恢复的可能性。随着时间推移,Tombstones 会经历 GCGracePeriod 后被清理。 6. **Compaction ...

    北大数据库原理与应用大作业

    Hadoop上的数据库系统,如HBase、Cassandra或Hadoop上的SQL引擎(如Hive、Pig和Impala),提供了处理大规模数据的解决方案。这些系统通常支持SQL查询,但其优化策略与传统的关系型数据库不同。例如,在Hive中,JOIN...

    OptConClient

    OptConCient 这是一个基于 Hector API 的 Java 客户端,它: 预测给定 subSLA 行的测试数据的最佳一致性级别(具有模型中参数延迟、吞吐量、数据包重传率和陈旧性的阈值)。 为给定训练模型的测试数据生成 ROC 曲线...

Global site tag (gtag.js) - Google Analytics