I haven't started using the experience stuff yet, but just looking at the docs for kvp I think it wouldn't be at all scalable (or anything I'd want to pay for) if I couldn't query whether a key exists other than to try to read it with a default value.
Also it makes sense to query for all the keys and get a paginated result in JSON, so you get back the first 100 or whatever, along with some range data. That way I can poke through it however I want to in one event loop, and you benefit from one query instead of 100. So my script would get data like this:
{"experience_key": "[exp key]", "range_start": 0, "range_end": 100, "keys": ["key", "key2", "etc"]}
It would be stale data as soon as you get it, because other scripts can kill keys, but it would be useful.
From there you could say llReadKeys(
, [default value]) which returns a strided list in one event cycle, also with a JSON counterpart which just adds JSON_INVALID for non-existent keys instead of a default.I'm only endorsing JSON because LSL doesn't have structured data types. I'll be poking JSON into the KVP if i use it.
I'd really only want to scope this kind of stuff for an experience.
For grid-wide services I'd want data stores to be *way* more flexible, and I doubt LL wants to give me that. As long as llHTTPRequest() is free, I'm happy.
I already have a RESTful API I made for a kiosk system, which I was thinking might be something to try and convert to KVP under experience keys. But we shall see how much free time I have to devote to it.