Hi,
I’m currently examining ways to 1) change the window operators to use the 
partitioned state abstraction for window state and 2) implement state backends 
for managed memory/out-of-core state.

I think it would be helpful to pull the state backend apart. Right now, for 
example, the DbStateBackend has a custom way of specifying another state 
backend that should be used for non-partitioned state since a data base really 
only makes sense for partitioned state. I was thinking about adding a state 
backend based on RocksDB, which would also only make sense for partitioned 
state. Pulling the two ways of state apart would allow the implementation to 
focus on the important parts and give the user flexibility without requiring 
every state backend to implement this.

What do you think about pulling the back ends apart?

—
Aljoscha

P.S. I have a prototype WindowOperator on partitioned state that does not 
regress in performance compared to the current WindowOperator. Also, I have a 
prototype RocksDB state backend. Here, the performance is about 1/10th compared 
to using the in-memory state backend (with 100.000 keys) but it scales way 
better (with the in-memory state backend performance goes down when increasing 
the number of keys while it stays constant with RocksDB). This is quite nice 
since it allows to use the same windowing code while exchanging the state 
backend based on the job requirements.

Reply via email to