Nick is saying that the StringListProperty has values like: A, B, C.
If you also have another property, say an IntegerProperty with value
7, and you create a compound index that contains the IntegerProperty
and the StringListProperty you will be OK because the index will look
like:
   7-A
   7-B
   7-C

However, if the index contains the IntegerProperty and the
StringListProperty twice the index looks something like:
   7-A-A
   7-A-B
   7-A-C
   7-B-B
   7-B-C
   7-C-C

The issue is NOT from one multiple valued (ie ListProperty) being in a
compound index once, but rather from one or more multiple valued
properties appearing more than one time in the same compound index.




Robert




On Tue, Oct 12, 2010 at 12:00, Jeff Schwartz <jefftschwa...@gmail.com> wrote:
> So a list property with 5000 entries in it that is not part of any compound
> index then would not in itself create an exploding index situation, but
> would if it were part of a compound index, correct? Nor would querying on a
> list property with 5000 entries not part of any compound index using an
> equality filer, correct?
>
> The reason I am asking all these questions is because I've implemented a
> fanout solution based on Brett Slatkin's youtube video -
> http://www.youtube.com/watch?v=AgaL6NGpkB8 - and was concerned that the
> principle's he promoted in the video using entitie with list properties as
> indexes to their parents aren't now problematic or considered bad practice
> or that changes have been made to the datastore where employing his
> technique would not create exploding indexes.
>
> Thanks in advance and for bearing with my many questions.
>
> Jeff
>
>
> On Tue, Oct 12, 2010 at 11:41 AM, Nick Johnson (Google)
> <nick.john...@google.com> wrote:
>>
>> Hi Jeff,
>>
>> On Tue, Oct 12, 2010 at 4:32 PM, Jeff Schwartz <jefftschwa...@gmail.com>
>> wrote:
>>>
>>> Hi Nick,
>>>
>>> From the docs at
>>> http://code.google.com/appengine/docs/java/datastore/queriesandindexes.html#Big_Entities_and_Exploding_Indexes:
>>>
>>> "You could call an index that refers to multiple properties with multiple
>>> values an "exploding index," because it can get very large with just a few
>>> values."
>>>
>>> I believe the key words in the above are "multiple properties with
>>> multiple values" however I cannot see anywhere where there is a compound
>>> index using multiple properties that include the list property which
>>> according to the above is what would/could create an exploding index. I
>>> should preface this by saying that I am not a python developer so if there
>>> is something in the yaml file that does create this situation I apologize
>>> but would you mind pointing out what in the yaml file is?
>>
>> The same (list) property multiple times has the same effect as using
>> multiple different properties. When you include a list in a custom index,
>> all the values of the list must be indexed; when you include multiple lists,
>> or multiple instances of the same list, all unique combinations of values
>> must be indexed.
>> -Nick Johnson
>>>
>>> Thanks in advance.
>>>
>>>
>>> On Tue, Oct 12, 2010 at 11:22 AM, Nick Johnson (Google)
>>> <nick.john...@google.com> wrote:
>>>>
>>>> Hi Jeff,
>>>> X is a StringListProperty, and it's indexed on multiple times. The
>>>> number of index entries generated for multiple instances of the same list
>>>> property is n!/(n-m)!, where n is the number of elements in the list, and m
>>>> is the number of repeats in the index.
>>>> -Nick Johnson
>>>>
>>>> On Tue, Oct 12, 2010 at 4:18 PM, Jeff Schwartz <jefftschwa...@gmail.com>
>>>> wrote:
>>>>>
>>>>> Hi Nick. It doesn't appear from the orignal poster's example that even
>>>>> if he had 5000 entries (the max) in his list property that that would 
>>>>> cause
>>>>> an exploding index. Can you elaborate.
>>>>>
>>>>>
>>>>> On Tue, Oct 12, 2010 at 10:59 AM, Nick Johnson (Google)
>>>>> <nick.john...@google.com> wrote:
>>>>>>
>>>>>> Hi Eric,
>>>>>> This is a classic 'exploding' index. With 10 elements in the list,
>>>>>> this index will try to generate 10*9*8*7*6 = 30,240 index entries - far
>>>>>> above the limit. It's not possible to build this index. Consider
>>>>>> restructuring your data, or using merge join queries.
>>>>>> -Nick Johnson
>>>>>>
>>>>>> On Tue, Oct 12, 2010 at 3:37 PM, Eric Ka Ka Ng <ngk...@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> I would like to build an index for the following entity
>>>>>>> Class entityA (db.Model):
>>>>>>>     X db.StringListProperty()
>>>>>>>     Y db.IntegerProperty()
>>>>>>>     Z db.IntegerProperty()
>>>>>>>
>>>>>>>
>>>>>>> in index.yaml
>>>>>>>
>>>>>>> - kind: entityA
>>>>>>>
>>>>>>>   properties:
>>>>>>>
>>>>>>>   - name: Y
>>>>>>>
>>>>>>>   - name: X
>>>>>>>
>>>>>>>   - name: X
>>>>>>>
>>>>>>>   - name: X
>>>>>>>
>>>>>>>   - name: X
>>>>>>>
>>>>>>>   - name: X
>>>>>>>
>>>>>>>   - name: Z
>>>>>>>
>>>>>>>     direction: desc
>>>>>>>
>>>>>>> but the index cannot be built and is always resulted in Error State
>>>>>>>
>>>>>>> Thx now we can vaccum the 'error' index now without being stuck in
>>>>>>> the "building" state and have to send emails to G to ask to mark the 
>>>>>>> index
>>>>>>> as 'Error'
>>>>>>>
>>>>>>> But I have tried several times to vaccum the index, then re-build,
>>>>>>> but always fail
>>>>>>>
>>>>>>> May i know why it keeps in failing? The StringList property X usually
>>>>>>> contains 5-10 strings.
>>>>>>>
>>>>>>> Best Regards,
>>>>>>>
>>>>>>> Eric
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Google App Engine" group.
>>>>>>> To post to this group, send email to
>>>>>>> google-appeng...@googlegroups.com.
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> google-appengine+unsubscr...@googlegroups.com.
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/group/google-appengine?hl=en.
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Nick Johnson, Developer Programs Engineer, App Engine Google Ireland
>>>>>> Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047
>>>>>> Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
>>>>>> Number: 368047
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Google App Engine" group.
>>>>>> To post to this group, send email to
>>>>>> google-appeng...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> google-appengine+unsubscr...@googlegroups.com.
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/google-appengine?hl=en.
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Jeff
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Google App Engine" group.
>>>>> To post to this group, send email to google-appeng...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> google-appengine+unsubscr...@googlegroups.com.
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/google-appengine?hl=en.
>>>>
>>>>
>>>>
>>>> --
>>>> Nick Johnson, Developer Programs Engineer, App Engine Google Ireland
>>>> Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047
>>>> Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
>>>> Number: 368047
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Google App Engine" group.
>>>> To post to this group, send email to google-appeng...@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> google-appengine+unsubscr...@googlegroups.com.
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/google-appengine?hl=en.
>>>
>>>
>>>
>>> --
>>> Jeff
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Google App Engine" group.
>>> To post to this group, send email to google-appeng...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> google-appengine+unsubscr...@googlegroups.com.
>>> For more options, visit this group at
>>> http://groups.google.com/group/google-appengine?hl=en.
>>
>>
>>
>> --
>> Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd.
>> :: Registered in Dublin, Ireland, Registration Number: 368047
>> Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number:
>> 368047
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine" group.
>> To post to this group, send email to google-appeng...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> google-appengine+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine?hl=en.
>
>
>
> --
> Jeff
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To post to this group, send email to google-appeng...@googlegroups.com.
> To unsubscribe from this group, send email to
> google-appengine+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to