This function is really cool. Many thanks for saving my money and time. With GAE and Objectify's help, I will hopefully release my Android/GAE MMO game on Apr,1
On Mar 26, 5:14 am, Duong BaTien <duong.bat...@gmail.com> wrote: > Hi: > > Congratulation and thank for tremendous efforts from the Objectify Team. > > By the way, has any one attempted Objectify with possible very large > index of subscribers and publishers of web-hook pub-sub (Google > PubSubHubbub of Atom or short message twitter style). > > Thanks > Duong BaTien > DBGROUPS and BudhNet > > On Thu, 2010-03-25 at 13:45 -0700, Jeff Schnitzer wrote: > > Today we released Objectify v2.1, the latest version of our opensource > > replacement for JDO/JPA on the Google App Engine datastore. > > > This version includes a major new feature, Partial Indexes. If you > > aren't sure what partial indexes are, the Wikipedia page > > (http://en.wikipedia.org/wiki/Partial_index) describes them so: > > > "A partial index, also known as filtered index is a database index > > which has some condition applied to it such that it only includes a > > portion of the rows in the table. This can allow the index to remain > > small even though the table may be rather large, and have fairly > > extreme selectivity." > > > Here is an example of an Objectify entity using partial indexes: > > > public class Player { > > @Id Long id; > > > // Simple conditions: IfFalse, IfTrue, IfZero, IfNull, etc > > @Unindexed(IfFalse.class) boolean admin; > > > // Smarter - sensitive to the actual default value > > @Unindexed(IfDefault.class) Team team = Team.NOTCHOSEN; > > > // You can make your own conditions > > @Unindexed(IfCustomCondition.class) Status status; > > > static class IfCustomCondition extends ValueIf<Status> { > > public boolean matches(Status value) { > > return (value == Status.DEAD || value == Status.RETIRED); > > } > > } > > } > > > Why should you care about optimizing indexes? > > > All queries in the datastore require indexes, which are a sort of > > reverse-mapping from value to key. These indexes occupy space and > > consume cpu resources whenever an entity is written to the datastore. > > With the addition of just a few indexes, this cost quickly doubles or > > triples the cost of storing the original entity: > > > * A basic entity with no indexes costs 48 api_cpu_ms to store. > > * Each single-property indexed field adds an additional 17 api_cpu_ms. > > > This number appears stable and consistent; appengine seems to have a > > static formula for computing datastore costs. Storage size costs are > > harder to measure, but from watching mailing list traffic it seems > > quite easy to double or triple your storage size with unnecessary > > indexes. > > > When should you care about optimizing indexes? > > > * Removing unnecessary indexes will not make writes faster, it will > > make them /cheaper/. All indexes are written in parallel, so indexes > > do not add latency to writes. Instead, indexes add $ to the bill you > > get at the end of the week - and push you closer to your quota limits. > > > * If your application has relatively small quantities of relatively > > static data, index optimization is probably pointless. On the other > > hand, if you have large data volumes or heavy write loads, you must > > carefully choose your indexes (or be very rich). > > > Do I need partial indexes, as opposed to just declaring whole fields > > indexed or not? > > > It depends on your dataset and your queries. In the Player example > > above, partial indexes can be extremely effective: > > > * You only ever filter on the admin field for actual admins, and most > > players are not admins. > > * You only ever filter on the team field for players who have chosen > > a team, and the bulk of players are not associated with a team. > > * You only ever filter on the status field for players who have > > active statuses, and you have a large number of inactive players. > > > Objectify's support for partial indexes also has the ability to > > determine index behavior based on "the whole entity". This allows you > > to perform certain kinds of limited multiple-property queries > > (including double inequality queries) without creating a > > multi-property index. As an example, it is very easy to model this > > index from the Wikipedia page: > > > create index partial_salary on employee(age) where salary > 2100; > > > An example of this is documented in the Objectify manual. > > > Thanks, > > The Objectify Team > > Jeff, Scott, and Matt > > > -- > > You received this message because you are subscribed to the Google Groups > > "Google App Engine for Java" group. > > To post to this group, send email to google-appengine-j...@googlegroups.com. > > To unsubscribe from this group, send email to > > google-appengine-java+unsubscr...@googlegroups.com. > > For more options, visit this group > > athttp://groups.google.com/group/google-appengine-java?hl=en. -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.