#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