#java #apache-flink
#java #apache-flink
Вопрос:
Глядя на документацию, кажется, что я мог бы использовать либо a ListState
, либо a ValueState<List<String>>
для сохранения состояния. Например, приведенный ниже код:
// Use ListState
ListStateDescriptor<String> lDescriptor = new ListStateDescriptor<String>
("testListState", TypeInformation.of(new TypeHint<String>() {}));
ListState<String> testListState = getRuntimeContext().getListState(lDescriptor);
// Use ValueState
ValueStateDescriptor<List<String>> testDescriptor =
new ValueStateDescriptor<List<String>>("testList",
TypeInformation.of(new TypeHint<List<String>>() {}));
ValueState<List<String>> testState = getRuntimeContext().getState(testDescriptor);
Если мне нужно сохранить уникальный список элементов, привязанных к каждому ключу, будет ли польза от использования одного над другим? Недостатком использования ListState было бы сначала преобразовать итерацию в список <>, если мне нужно изменить его перед сохранением списка, тогда как я мог бы просто получить список напрямую, если я использую ValueState.
Комментарии:
1. ValueState<Список<Строка>> может иметь условия гонки
Ответ №1:
Я использую ValueState только в том случае, если хочу сохранить только одно значение для каждого ключа. Вы можете использовать его для хранения списков, но код будет более подробным. Если вы используете ValueState, вы должны получить значение, обновить список и обновить значение, но если вы используете ListState, вы можете управлять им напрямую
Комментарии:
1. Я согласен. Единственная причина использовать ValueState здесь, если вам нужен определенный тип коллекции (например, Set ), а не список.
2. Как насчет аспекта производительности при использовании ValueState против ListState?