In any case when working with JSON columns in SQL it is useful to index the documents internal fields, which the OP doesn't talk about. Found a nice example in this blog post [2].
--
There's a very short chapter in "Modern B-Trees Techniques" [2] that compare B-Trees with Hash indexes:
* Durability schemes are simple and robust for b-trees, not so for hash maps.
* Ordering has advantages for concurrency control by means of key range locking.
* "Very few database implementation teams find hash indexes among the opportunities or features with a high ratio of benefit and effort, in particular if B-tree indexes are required in any case in order to support range queries and ordered scans."
--
1: https://www.postgresql.org/docs/current/indexes-types.html#I...
2: https://w6113.github.io/files/papers/btreesurvey-graefe.pdf
Tha was never the case. It would be silly to assume that given ultimately your GET and UPDATE operations are inter-process requests which involve serialization/deserializarion, and most of the time even require at least a network call.
O(1) doesn't mean "instant" it means "does not grow with the dataset"