6

在 cassandra DB 中,我打算存储一个对象数组。最好的方法是什么。对象映射到 java 中模型类的数据映射。

Class Test{
   @Column(name = "id")
   int id,
   @Column(name = "name")
   String name,
   Address[] address

 class Address{
   String add1,
   String city,
   String state 
  }
}

我是否应该通过将列添加到与 add1、city、state 相同的键空间来将所有(id、name、add1、city、state)放在一个表中?或为地址添加新表或任何其他选项..

我试图添加TYPE但抛出错误为:“来自服务器的错误:代码 = 2200 [Invalid query] message="A user type cannot contain non-frozen UDTs”来自错误和类型语法,我使用了关键字' frozen',但不是运气。更改表也会给出类似的错误,例如:“ mismatched input 'frozen' expecting EOF

另外,如果我必须保存类型的列怎么办,'String[ ]'因为它不是像地址 [] 这样的自定义类型。它是字符串还是文本。?我们只需要添加alter语句吗?如果是这样,它看起来如何

4

2 回答 2

10

对于您的情况,首先,您需要在 Cassandra 中创建一个 UDT(用户定义类型)。

Create TYPE address(
   add1 text,
   city text,
   state text
);

然后创建一个包含此 UDT 的表。

Create table Test(
   id int,
   name text,
   address list<frozen<address>>,
   primary key(id)
);

如果您想了解更多关于 UTD 及其用法的信息,请访问以下链接:

编辑

此外,如果我必须保存类型为“String[]”的列怎么办,因为它不是像 Address[] 这样的自定义类型。它是字符串还是文本。?我们只需要添加alter语句吗?如果是这样,它看起来如何

答案Alter table test add stringarr list<text>查看此链接以了解有关 cassandra 数据类型的更多信息:CQL 数据类型

于 2018-03-18T06:00:39.650 回答
2

您可以创建 UDT 类型:

CREATE TYPE people (
    name text,
    address
);

现在像这样声明你的领域

people set<frozen <people>>

我希望它对你有帮助

于 2018-03-16T18:42:58.960 回答