gpt4 book ai didi

nosql - 创建复合列 cassandra

转载 作者:行者123 更新时间:2023-12-04 18:17:08 24 4
gpt4 key购买 nike

我需要为每个夜间构建存储基准运行。为此,我提出了以下数据模型。

BenchmarkColumnFamily= {

build_1: {
(Run1, TPS) : 1000K
(Run1, Latency) : 0.5ms
(Run2, TPS) : 1000K
(Run2, Latency) : 0.5ms
(Run3, TPS) : 1000K
(Run3, Latency) : 0.5ms
}

build_2: {
...
}
...

}

为了创建这样的模式,我在 cassandra-cli 上提出了以下命令:
create column family BenchmarkColumnFamily with 
comparator = 'CompositeType(UTF8Type,UTF8Type)' AND
key_validation_class=UTF8Type AND
default_validation_class=UTF8Type AND
column_metadata = [
{column_name: TPS, validation_class: UTF8Type}
{column_name: Latency, validation_class: UTF8Type}
];

上述命令是否创建了我打算创建的架构?我感到困惑的原因是,当我使用以下方法将数据插入上述 CF 时:
set BenchmarkColumnFamily['1545']['TPS']='100';即使比较器类型是复合的,它也会成功插入。此外,即使以下命令也成功执行
set BenchmarkColumnFamily['1545']['Run1:TPS']='1000';

我错过了什么?

最佳答案

我不认为你做错了什么。 CLI 正在根据类型解析字符串以获取值,可能使用 org.apache.cassandra.db.marshal.AbstractType<T>.fromString() .对于复合类型,它使用“:”作为字段分隔符(不是我见过的文档,但我已经尝试使用 Java 代码来说服自己。

如果没有“:”,它似乎只是设置了 Composite 的第一部分,而将第二部分保留为 null。要仅设置第二个,您可以使用

set BenchmarkColumnFamily['1545'][':NOT_TPS']='999';

在 CLI 中,转储 CF:
list BenchmarkColumnFamily;

并且您应该看到所有名称(所有行),例如
RowKey: 1545
=> (column=:NOT_TPS, value=999, timestamp=1342474086048000)
=> (column=Run1:TPS, value=1000, timestamp=1342474066695000)
=> (column=TPS, value=100, timestamp=1342474057824000)

没有办法(通过 CLI)将复合元素限制为非 null 或特定值,这是您必须在代码中执行的操作。

此外,创建 CF 的 column_metadata 选项是不必要的,因为您已经将默认验证列为 UTF8Type。

关于nosql - 创建复合列 cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com