2

如果我像以前一样在 Cassandra 中创建了一个这样的列族,我使用的是基于 Thrift 的客户端。

create column family USER
with comparator = 'UTF8Type'
and key_validation_class = 'UTF8Type'
and default_validation_class = 'BytesType'

那么我可以使用具有异步/批量写入功能的 Datastax Java 驱动程序插入到上面的列族中吗?

我将使用 INSERT 语句插入到上面的列族中吗?这可能使用 Datastax Java 驱动程序吗?

我的印象是,我只能使用 Datastax Java 驱动程序插入基于 CQL 的表中,而不是列族设计表中......

4

2 回答 2

2

TL;DR
有点,但最好创建一个基于 cql3 的表并从那里继续。

首先要清楚地了解正在发生的事情,请使用 cqlsh 中的 describe 命令:

cqlsh> describe COLUMNFAMILY "USER";

CREATE TABLE "USER" (
  key text,
  column1 text,
  value blob,
  PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE AND
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='NONE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

然后您可以使用 cqlh 构建插入语句(我使用了 cqlsh):

cqlsh:test> insert into test."USER" (key, column1, value) VALUES ('epickey', 'epic column 1 text', null);

但是,如果您进行选择...

cqlsh:test> SELECT * FROM test."USER" ;

(0 rows)

完成后返回 CLI:

[default@unknown] use test;
Authenticated to keyspace: test
[default@test] list USER;
Using default limit of 100
Using default cell limit of 100
-------------------
RowKey: epickey

1 Row Returned.
Elapsed time: 260 msec(s).

我将使用的最后一个工具是 sstable2json(从 sstable 中获取所有数据,然后......将其转换为 json 表示形式)

对于 USER cf 的上述单个插入,我得到了这个:

[
{"key": "657069636b6579","columns": [["epic column 1 text","5257c34b",1381483339315000,"d"]]}
]

所以数据就在那里,但你真的无法通过 cql 访问它。

注意这都是使用 C* 2.0 和 cqlsh 4.0 (cql3) 完成的

于 2013-10-11T09:28:34.267 回答
0

是的,使用下面的代码:

String query = "INSERT INTO " + keyspace_name + "." + column_family + " (" + column_names + ") VALUES (" + column_values + ");";
statement = session.prepare(query);
boundStatement = new BoundStatement(statement);

boundStatement.setString(0, key);
boundStatement.setString(1, subColNames[k]);
boundStatement.setMap(2, colValues);
session.execute(boundStatement);
于 2013-10-11T09:05:55.433 回答