Apache Ignite дает противоречивый результат с объектами коллекции

#java #error-handling #collections #duplicates #ignite

#java #обработка ошибок #Коллекции #дубликаты #ignite

Вопрос:

Я пытаюсь сохранить объект Person в кэше Ignite в РАЗДЕЛЕННОМ режиме с резервной копией как 1. Для кэширования данных есть 3 серверных узла

 public class PersonImpl{
   private String name;
   private HashMap<Integer,String> attr = new HashMap<>();
   private HashMap<Integer,String> attr1 = new HashMap<>();
   private ArrayList<Integer> a;
   private ArrayList<Integer> b;
}
 

Включение HashMap и ArrayList в объект дает дубликаты с использованием разных функций запроса в Ignite, в то время как удаление HashMap и ArrayList не дает дубликатов. Связана ли эта проблема с объектом коллекций?
Также изменение резервной копии с 1 на 0 не дает противоречивых результатов.
Кто-нибудь сталкивался с подобной проблемой и как ее решить

Ниже приведен код, который я использую для запроса : sqlQuery(PersonImpl.class,"true");

 public List<V> sqlQuery(Class<V> persistentClass, String t){
    SqlQuery<K,V> sqlQuery = new SqlQuery<>(persistentClass,t);
    List<V> values = new ArrayList<V>();
    QueryCursor<Entry<K,V>> queryCursor= getCache.query(sqlQuery);
    for(Entry<K,V> entry : queryCursor){
         values.add(entry.getValue());
    }
return values;
}
 

Для сохранения объекта в кэше

 store(T obj){
put(obj.getAffinityKey(), obj);
}
 

Комментарии:

1. Какой запрос вы используете?

2. Пробовал как с SqlQuery, так и с SqlFieldsQuery. Ignite версии 2.6

3. Я думаю, Владимир спрашивал, можете ли вы показать свой SQL-запрос и определения таблиц. Я думаю, что это просто не будет работать без денормализации.

4. @VladimirPligin Я добавил код для хранения и восстановления объектов выше. Для тестирования я храню 10000 объектов объекта PersonImpl, имеющих разный размер HashMap и List. Дубликаты обычно не возникают, когда размер HashMap и List равен нулю. Дубликаты возникают, когда увеличивается случайность в размере HashMap. Ignite не обеспечивает поддержку объекта коллекций внутри объекта, который будет сохранен в кэше?

5. @Krishna каково ваше определение таблицы? Вы вставляете объект с помощью cache API и пытаетесь выполнить чтение с помощью SQL, для этого необходимо объявить определение таблицы, например, с использованием конфигурации QueryEntities ignite.apache.org/docs/latest/SQL/sql-api