KV is a global, low-latency, key-value data store. It stores data in a small number of centralized data centers, then caches that data in Cloudflare’s …
it does seem high, but hard to tell without a lot of debugging where the bottleneck is. To be honest I'm not actually the expert here, I work mostly on the deep back-end side. There are definitely things in the works to improve latency, like read replicas. We also plan to enable sqlite in DO itself, in which case the database is actually local so latency is zero (but in that case some distributed system design matters become the app's resonsibility).
Regarding KV: For pure reads, when hitting cache, if KV is not faster than D1, something is wrong with KV. KV is all about incredibly fast reads particularly for hot keys. It gets a lot slower for cold keys (try reading a randomly-generated key name and see how long it takes to return null), and writes are extremely slow (both to complete, and then to propagate -- the latter could take a minute). With D1, on the other hand, at present, a write will only take slightly longer than a read, and once it completes at all it is fully "propagated" (D1 is strongly consistent).