gpt4 book ai didi

schema - 为具有元数据的 super 列创建 Cassandra 模式

转载 作者:行者123 更新时间:2023-12-01 10:08:12 25 4
gpt4 key购买 nike

我希望使用 cassandra -cli 在我的数据库中使用以下结构

例如,我有一个人有地址,地址包含邮政编码、门牌号等示意图看起来像这样:

name: "address",
value: {
city: {name: "city", value: "San Francisco"},
street: {name: "street", value: "555 Union Street"},
zip: {name: "zipcode", value: "94105"},
}

我知道如何创建超列和普通列。但我想使用 column_metadata 来指定超列中的列的外观。所以最终会是这样的:

Create column family person
with comparator = UTF8Type
and key_validation_class=UTF8Type
and default_validation_class = UTF8Type
and compression_options =
{sstable_compression:SnappyCompressor, chunk_length_kb:64}
and column_metadata = [
{column_type: super, column_name: address, validation_class: UTF8Type
column_metadata =[
{column_name: city, validation_class: UTF8Type}
{column_name: Street, validation_class: UTF8Type}
{column_name: zip, validation_class: UTF8Type}
{column_name: housnumber, validation_class: LongType}
];

这有可能吗?

如果我能把一个 super 列放在另一个 super 列中就更好了。这样, super 列“addresses”可以包含多个 super 列“address”,列有:“street”、“zip”等。

最佳答案

super 列上的列元数据已经应用于子列本身。在您的示例中,您将 super 列的 validation_class 设置为 UTF8Type。这实际上没有意义,因为 super 列的值是列本身而不是 UTF8。 super 列名称已经根据您设置为 UTF8Type 的比较器类型进行了验证和排序。

所以你需要的是:

column_metadata = [
{column_name: city, validation_class: UTF8Type}
{column_name: Street, validation_class: UTF8Type}
{column_name: zip, validation_class: UTF8Type}
{column_name: housnumber, validation_class: LongType}
];

值得注意的是,此元数据将应用于行中的所有 super 列。因此,如果您有多个 super 列和一个名为“city”的子列,验证将应用于所有这些列。

我还要指出,通常不鼓励使用 super 列,因为它们有几个缺点。超列中的所有子列在读取一个子列时都需要反序列化,并且不能在超列上设置二级索引。它们也只支持一层嵌套。

http://www.datastax.com/docs/1.0/ddl/column_family#about-super-columns

要实现任意级别的嵌套,您可以使用 CompositeType 作为常规列族上的列比较器。不幸的是,目前没有太多关于 CompositeType 的文档。我建议查看源代码以获取更多信息 src/java/org/apache/cassandra/db/marshal/CompositeType.java。

关于schema - 为具有元数据的 super 列创建 Cassandra 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8298039/

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