С точки зрения API, вам всегда нужно вручную обновлять состояние.
Однако фактическое поведение зависит от состояния бэкэнда. Если приложение использует InMemoryStateBackend
или FsStateBackend
, все локальные состояния сохраняются в куче JVM рабочего процесса, т. Е. Бэкэнд состояния просто содержит ссылку на объект. Следовательно, состояние изменяется непосредственно при изменении объекта.
Если вы используете RocksDBStateBackend
, то все обращения к состоянию де / сериализуются и считываются / записываются в RocksDB. В этом случае изменение объекта не влияет на состояние.
Я рекомендую всегда явно обновлять состояние, поскольку это обеспечит возможность переключения бэкэнда состояния без изменения логики вашего приложения.