Как хранить массив объектов в Кассандре
В Кассандре БД я планирую хранить массив объектов. Каков наилучший способ сделать это. сопоставление объекта с сопоставлением данных с классом модели в Java.
Class Test{
@Column(name = "id")
int id,
@Column(name = "name")
String name,
Address[] address
class Address{
String add1,
String city,
String state
}
}
Должен ли я поместить все (id, name, add1, city, state) в одну таблицу, добавив столбцы в одно и то же пространство клавиш с add1, city, state? или добавить новую таблицу для адреса или любые другие варианты..
Я пытался добавить TYPE
Но выдает ошибку как: "Ошибка с сервера: код = 2200 [Invalid query] message="A user type cannot contain non-frozen UDTs
"Из синтаксиса ошибки и типа я использовал ключевое слово"frozen
но не удача Изменение таблицы также дает похожую ошибку что-то вроде:mismatched input 'frozen' expecting EOF
"
Кроме того, что если я должен сохранить столбец типа 'String[ ]'
Так как это не пользовательский тип, такой как Address[]. это из строки или текста.? Нужно ли просто добавить оператор alter? если да, то как это выглядит
2 ответа
Для вашего случая, во-первых, вам нужно создать UDT(пользовательский тип) в Cassandra.
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
Вы можете создать тип UDT:
CREATE TYPE people (
name text,
address
);
и теперь объявите свое поле так
people set<frozen <people>>
Я надеюсь, что это поможет вам