Как хранить массив объектов в Кассандре

В Кассандре БД я планирую хранить массив объектов. Каков наилучший способ сделать это. сопоставление объекта с сопоставлением данных с классом модели в 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>>

Я надеюсь, что это поможет вам

Другие вопросы по тегам