4

我最近开始CQL对使用 Datastax Java 驱动程序很感兴趣。以前,我使用的是column family代替 table,我使用的是 Astyanax 驱动程序。我需要在这里澄清一些事情-

我在我的生产集群中使用下面的列族定义。而且我可以即时插入任意列(及其值),而无需实际修改列族模式。

create column family FAMILY_DATA
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'BytesType'
and gc_grace = 86400;

但是在阅读完这篇文章之后,看起来 - 每当我要插入一个新列时,我都需要更改架构,这不是我想要做的......因为我相信 CQL3 需要存在列元数据...... .

如果我使用 Datastax Java 驱动程序,是否还有其他方法可以添加任意列及其特定值?

任何代码示例/示例都将帮助我更好地理解.. 谢谢..

4

2 回答 2

4

我相信在 CQL 中,您可以使用collections解决这个问题。

您可以将字段的数据类型定义为映射,然后将任意数量的键值对插入到映射中,这应该主要表现为传统 Thrift 中的动态列。

就像是:

CREATE TABLE data ( data_id int PRIMARY KEY, data_time long, data_values map );
INSERT INTO data (data_id, data_time, data_values) VALUES (1, 21341324, {'sum': 2134, 'avg': 44.5 });

这里有更多信息。

此外,您可以在此处找到 CQL3 类型与 DataStax 驱动程序使用的 Java 类型之间的映射。

于 2013-10-01T07:24:48.610 回答
0

如果您为该表启用紧凑存储,它将向后兼容 thrift 和 CQL 2.0,这两者都允许您输入动态列名。

使用这种方法,您可以拥有任意数量的任意名称的列。主键由两部分组成,第一个元素是 row_key,其余元素组合为一个集合形成单个列名。

在此处查看推文示例

尽管您已经说过这已经在生产中,但可能无法使用现有数据更改表以使用紧凑存储。

于 2013-10-01T13:15:23.077 回答