Рекомендуемый способ постоянного хранилища Apache Ignite для версий классов

В системах РСУБД я могу добавлять новые столбцы, даже если в таблице уже есть данные. Интересно, как это предлагается сделать с постоянным хранилищем Ignite при хранении объектов класса?

Если у меня есть следующий класс с большим количеством данных:

public class Person implements Serializable
{
  @QuerySqlField
  String firstName;

  @QuerySqlField
  String lastName;
}

А позже я, возможно, захочу добавить в этот класс новые поля, например

public class Person implements Serializable
{
  @QuerySqlField
  String firstName;

  @QuerySqlField
  String lastName;

  @QuerySqlField
  Date birthday;
}

Могу ли я без проблем поставить и получить старые и новые версии этого класса? Что происходит с новым значением поля, когда я читаю старую версию класса из постоянного хранилища?

Как будут работать SQL-запросы, если день рождения столбца недоступен в старых версиях данных?

Спасибо за любые предложения.


person DonTequila    schedule 27.08.2018    source источник


Ответы (1)


Да, вы можете прозрачно размещать и получать объекты после обновления определения класса на стороне клиента. Единственное требование - НЕ развертывать этот класс в локальном пути к классам серверных узлов.

Однако SQL не подхватит это автоматически, и в этом случае аннотации не будут обрабатываться. Чтобы изменить схему SQL во время выполнения, вам необходимо использовать команды DDL (ALTER TABLE, CREATE IMDEX и т. Д.). Подробнее здесь: https://apacheignite-sql.readme.io/docs/ddl

person Valentin Kulichenko    schedule 27.08.2018
comment
Спасибо. Отсутствие развертывания класса на серверном узле означает, что серверы будут использовать старую версию класса или они не должны иметь какое-либо из этих определений класса в любое время? Вы можете объяснить причину? - person DonTequila; 28.08.2018
comment
@DonTequila Отсутствие развертывания класса означает, что на серверных узлах вообще нет класса любой версии. Ignite использует специальный двоичный формат для хранения данных, который позволяет: apacheignite.readme.io/docs/binary- маршаллер - person Valentin Kulichenko; 29.08.2018
comment
еще раз спасибо за ответ, но я все еще в замешательстве. Разве серверным узлам не нужны именно эти классы для работы с ними и компьютерных задач? Вы говорите о чистых узлах сервера базы данных? Итак, вы предлагаете хранить узлы сервера БД отдельно от узлов вычислительного сервера? - person DonTequila; 29.08.2018
comment
В вычислениях вы можете использовать BinaryObject и withKeepBinary() (описанные на той же странице). - person Valentin Kulichenko; 31.08.2018