For this specific feature we should, because extreme cases are the most useful ones:
I see use cases without tombstones:
-
Databases where providers want to retain history: for example, daily temperatures of some cities.
-
Databases where providers don’t want to retain history, but they are forced to because the database is public: for example, a vendor might not be happy to see his previous prices available to consumers because the discount percentage is not as high as promised, but he won’t be able to hide them because they are public.
I see use cases with only tombstones before current value: private databases where owners don’t need to retain history which is majority of simple databases (and this is why I want to retain MDs because they are efficient at that).
But I fail to see a use case where users would want sometimes to retain history and some other times not (for the same key). What would be the inconvenience to always retain history in this case ? (knowing that we are talking of private data, because public data cannot be selectively hidden).
I don’t deny this. Just also allow a map without history implemented in an efficient way.
Debating if MDs can or cannot be used as a private database is a digression. But nevertheless, I will argue:
-
Standard SQL databases can easily be implemented with MDs: A table is a MD, its primary key is the key and the record is the value. You can even implement foreign keys with MDs: The foreign key of the source table is the key and the vector of primary keys of the target table is the value. Simple and effective and many SQL databases are implemented like this.
-
NoSQL databases can also be implemented: A collection is a MD, a document is a value and its id is the key.
-
And more generally, any set of mutable objects stored in a MD can be viewed as a database.
Problem is not on disk but in memory. Your proposed Vec representation is very efficient:
-
immediate computation of its version (= length of vector)
-
immediate access to the ith element
But if you compact elements, then performance of these operation will be degraded. And you must keep the efficiency in all programming language:
-
rust for vault and api
-
C#, Javascript, C, Java … for clients apps.
Removing MDs is such a dramatic change that this must be specified in the RFC.
You cannot remove a feature which is already implemented in an efficient way (MDs) without indicating how you reimplement it without losing too much performance.
(but I would prefer that you just keep MDs).