I'd like to suggest a per avatar data store for experiences. The agent data store would belong to each agent, but would be used by experience scripts to store agent data.
The data would only be accessible to scripts in objects owned by the avatar and in the same experience. For example, an attached experience HUD or weapon. Other scripts would only be able to access the data indirectly via a script that has access.
This would make experience data more scalable. The avatar's data would only be accessible if the avatar visits the experience. The experience data store wouldnt grow if more people join. For grid wide experiences, any avatar data could go in the avatar data store.
It could make per agent data more secure. For example, you could store visitor tracking info or scores so only the avatar concerned can access their data. Personal data wouldnt be accessible to anyone who can read the experience data store.
If an avatar left the experience the agent data could be automatically deleted from their data store.
There would be new functions similar to the existing experience data functions:
llCreateKeyValueAgent
llDeleteKeyValueAgent
llReadKeyValueAgent
llUpdateKeyValueAgent
llKeysKeyValueAgent
llKeyCountKeyValueAgent
llDataSizeKeyValueAgent
This shouldnt increase data storage overall, as the data would otherwise be in the experience data store. There can be a limit to how much data an experience can use, it doesnt have to be a whole notecard's worth.