looks interesting, but I do not understand all.
how do you get back to your data (if I understood, you query on
specific kinds that are your pre-filtered value).
Do you get your data using ancestor ?

If you have time to give a short example, it will be great !
thank you,
Philippe

On Aug 20, 3:04 pm, Juraj Vitko <juraj.vi...@gmail.com> wrote:
> So guys thanks for the good IRC chat:)
>
> Basically even if this was implemented, it would be too costly on
> resources.
>
> What I needed, was to change my thinking to better fit App Engine. The
> good thing is, that if one optimizes for App Engine, then his app will
> run faster _everywhere_.
>
> Basically, the best method for being able to show filtered data in a
> Grid that can be sorted _and_ paged on any column, one needs to pre-
> filter the data (upon created/update/delete) into separate kinds. This
> filtered kind then can be sorted on using the default indexes, because
> filter was already applied. Also, the data stored in this filtered
> kind is not the exact copy of the original data, but rather its string
> representation with unique suffixes to support lexicographical
> ordering and no-equality-restart pagination.
> The advantage of this is also that a much more sophisticated filtering
> can be used, not just the built-in query operators.
> One has to add logic to support recomputation of the filtered kind if
> the filter code or sorting-enabled columns change as the app is
> evolving, but that's a one time job and can be reused if done
> properly.
>
> On Aug 19, 6:01 am, Juraj Vitko <juraj.vi...@gmail.com> wrote:
>
>
>
> > sorry! correction of: "filter column is named 'f', value is named 'v'"
>
> > the 'f' and 'v' are actually a the same property now, so:
>
> > select from RelationIndex where f == 'roleA' && f == 'registered' && f
> > == '{User}' && f == '(lastName') && f > 'a.Smith:xJ8mFc9r' order by f
> > asc;
>
> > like that.
>
> > On Aug 19, 3:49 am, Juraj Vitko <juraj.vi...@gmail.com> wrote:
>
> > > On a query with equality filter on a list property, would it be
> > > possible to:
>
> > > 1) _not_ discard the sort order on that property,
> > > 2) allow for inequality test on smallest/highest value of that list
> > > property (similar to ordering)
>
> > > That way it would be possible to implement "relation indexes" using a
> > > table with a single list property (no custom indexes required!)
>
> > > The property would look something like: [ a.val:unique, filter1,
> > > filter2, filterN, z.val:unique ]
>
> > > The two 'val' is the same value to be lexicographically ordered (so
> > > numeric types must be converted to appropriate strings).
> > > The a. and z. prefixes would be actually the lowest and highest
> > > printable ascii chars, just so that they are always the lowest and
> > > highest value of the list property, and can be used in asc and desc
> > > ordering.
> > > The filters would be used for equality filtering.
>
> > > Then this query would be possible:
> > > select from kind where prop == filter1 && prop == filter2 && prop >
> > > 'a.someval:unique' order by prop asc
> > > (the optional greater-than operator is there to support paging)
>
> > > The sort order would _not_ be dropped only if specifically requested
> > > by the user, as to not incur needless overhead on current queries.
>
> > > A real-use example of a relation index table shared by multiple kinds:
>
> > > select from RelationIndex where f == 'roleA' && f == 'registered' && f
> > > == '{User}' && f == '(lastName') && v > 'Smith:xJ8mFc9r' order by v
> > > asc;
>
> > > - filter column is named 'f', value is named 'v'
> > > - the { and } are used to distinguish a kind name filter
> > > - the ( and ) are used to distinguish a column name filter
> > > - the 'v' always contains value belonging to that table/column
> > > - 'xJ8mFc9r' is the unique suffix
>
> > > The benefits of the "relation indexes" technique using a single list
> > > property:
> > > 1) single-query forward/backward bookmark paging (no equality restarts
> > > needed),
> > > 2) asc/desc ordering on any number of columns (one column at a time)
> > > 3) no custom indexes required (hard-limited to 100 per app)
>
> > > One could argue that it is simpler to implement relation indexes using
> > > a table with 2 columns:  "filters" and "value" - however:
> > > 1. this table needs a custom index
> > > 2. due to the custom index, max. 4 filters can be queried on at the
> > > same time (tested)
> > > 3. this custom index must enumerate all the filters (filter asc,
> > > filter asc, filter asc, filter asc, value asc + the same for value
> > > desc) - otherwise custom index space is wasted with permutations
> > > 4. due to point 3., each row in the index table must contain a 'dummy'
> > > filter value that is used to "park" the unused filters, only so that
> > > the query always matches the custom index definition, ie. "where
> > > filter == 'abc' && filter == 'def' && filter == 'dummy' && filter ==
> > > 'dummy'"
> > > 5. both runtime and storage overhead of this approach are much higher
> > > than the single-property approach (due to the list property being
> > > multiplied by 2 for indexing)
>
> > > Your opinions?
> > > J.
--~--~---------~--~----~------------~-------~--~----~
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-appengine@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