Apache Flink ListState <字符串>与ValueState <list <字符串>>

时间:2019-04-16 17:26:17

标签: java apache-flink

看文档,似乎我可以使用ListStateValueState<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的缺点是首先将Iterable转换为List <>,而如果使用ValueState,则可以直接检索列表。

1 个答案:

答案 0 :(得分:1)

如果我只想为每个键存储一个值,则仅使用 ValueState 。您可以使用它来存储列表,但是代码将更加冗长。 如果使用 ValueState ,则必须获取值,更新列表并更新值,但是如果使用 ListState ,则可以直接对其进行管理