Hi George,
Basically it's because of the "_ah_SESSION" token. This token is created whenever an app engine standard application stores a user's session and contains all the information about the session.
Something that was not easy to find is that when it's created it is then stored both on memcache and on datastore, and never cleaned from datastore, even if its expiration (_expires) period passes.
We have ended creating a cloud function to delete from datastore all expired entries with a cron, but that has reached a whole new level of issues with security (which I will leave for another post).
One last thing, is, as feedback, it´s a bit "sneaky" to store data from the users in datastore without providing a free way to clean it afterwards. I mean, just to clean up the expired entries we are gonna have to pay for:
- Reading from the datastore.
- Deleting from the datastore.
- Cloud function periodically activated.
For something that is neither our wish nor our desire to have, ;).
On the other hand, if we didn't pay for it, I already have more than 500 MB of expired session entries on datastore, meaning that I'd still have to pay to store something I have no wish or use to store, without any notification of it.
Once you start to look in depth, it's all over the place, but if your not aware, it's hard to find it referenced in the docs.
Anyway, thanks for your assistance.
Miguel Pagán Murphy