I notice that the most Merklized key-value implements (e.g., IAVL) support multi versions of tree, but in the case of TM, where the chain is fork-less, could we use a single-version instead of multi-version one?
I am working on an idea that aims to improve DB performance dramatically using single-verison tree. For TM case, my goal is to achieve the following IO costs between BeginBlock to EndBlock
- Get(): O(1) read IO for Get() (assuming value can be read in O(1) IO)
- Put() and return root hash: for each Put(), the cost is O(log_m(s)) read IO, O(1) for write, where m is a large number, e.g., 50, and s is the number of key-value pairs in the DB.
Anyone interested in the idea? Happy to discuss.