The amount of storage used depends hugely on what indexes you define.
In particular, there is the problem of 'exploding indexes'. Suppose
you have an entity with the following properties:
foo.alist = [1, 2, 3, 4, 5]
foo.anotherlist = ["foo", "bar", "baz", "quux"]
foo.anumber = 42
And suppose that foo is a child entity of another entity called "bar",
which is itself a child entity of "bleh".
Creating an index on 'anumber' will insert exactly one index entry, as
you would expect.
Creating an index on 'alist' or 'anotherlist' will insert 5 and 4
index entries - one for each item in the list.
Creating an ancestor index on 'anumber' will insert 3 entries - one
for (foo, 42), one for (bar, 42), its parent, and one for (bleh, 42),
the root entity.
If you start combining properties with multiple values, though, things
start to become problematic:
An index on 'alist' and 'anotherlist' will create 5*4=20 index entries.
An ancestor index on 'alist' and 'anotherlist' will create 5*4*3=60
index entries!
An index on 'alist', 'alist' (eg, the same entry twice to allow
selecting only entities that have two different values for the list)
will create 5*5=25 index entries.
As you can see, this becomes particularly problematic with long lists,
and indexes that index more than one of them, or the same one twice. I
would hazard a guess that you either suffer from 'exploding indexes',
or simply have a lot of indexes over your entities.
-Nick Johnson
If these are the only kinds and indexes you have then this is indeed
anomalous. Send me your app's ID (via email, if you wish) and I'll
have someone look into it.
-Nick Johnson