Hi Aaron

We would usually compare MapState with Map in java language. And your request 
is not what typical Map interface but SortedMap defines.

I think it's reasonable If we introduce SortedMapState interface in Flink. 
However, there existed several challenges for RocksDB.

  *   RocksDB only support byte-wise comparator by default, which means those 
non-fixed length serializer (e.g. StringSerializer) would generate bytes with 
different lexicon order compared with their original strings in java. Blink had 
ever tried to implement this feature named OrderedBytes [1], which still has 
many limitations and only applied in table API.

  *   RocksDB actually support java comparator and we have also implemented it 
privately on RocksDB-4.2. However, the performance behaves badly.
  *   RocksDB later support native comparatot for java users [2] and we are 
still looking at this future although this would be a bit complex for Flink 
users if they want their classes could be comparable as they want.

Hope this could help you.

[1] 
https://github.com/apache/flink/blob/blink/flink-libraries/flink-table/src/main/java/org/apache/flink/table/typeutils/ordered/OrderedBytes.java
  *   
<https://github.com/apache/flink/blob/blink/flink-libraries/flink-table/src/main/java/org/apache/flink/table/typeutils/ordered/OrderedBytes.java>
 [2] https://github.com/facebook/rocksdb/pull/3334

Best
Yun Tang


  *

________________________________
From: Aaron Langford <aaron.langfor...@gmail.com>
Sent: Tuesday, January 7, 2020 1:36
To: dev@flink.apache.org <dev@flink.apache.org>
Subject: Why aren't Range Scans Supported in MapState?

Hey Flink Community,

RocksDB natively supports range scans for keys. Is there a good story why
we don't have a way to ask for keys by range or prefix currently in
MapState?

Aaron

Reply via email to