[appengine-java] Cheapest way to run an SQL EXISTS query with Datastore API?

2010-10-26 Thread Dan Dubois
What is the absolute cheapest way (CPU cost) theoretically to run an
SQL EXISTS query with the Datastore API?

I imagine FetchOptions would be
FetchOptions.Builder.withChunkSize(1).limit(1).prefetchSize(1) and
probably option 1 below.

Query query = new Query(KIND);
//add filters and sorts here, if querying by key use
query.setKeysOnly()
DatastoreService datastoreService =
DatastoreServiceFactory.getDatastoreService();
PreparedQuery pq = datastoreService.prepare(query);

//Option 1
long count =
pq.countEntities(FetchOptions.Builder.withChunkSize(1).limit(1).prefetchSize(1));

if (count == 0) {
//does not exist
}
else {
//exists
}

// or maybe
//Option 2
if (pq.asIterator().hasNext()) {
//exists
}
else {
//does not exist
}

Is there anything cheaper?

Best wishes,
Dan

-- 
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.



Re: [appengine-java] Cheapest way to run an SQL EXISTS query with Datastore API?

2010-10-26 Thread Ikai Lan (Google)
The cheapest way is to use the value you are checking for as a datastore
key, then to do a get by key. A query always results in an index operation
followed by a fetch by key, so you are reducing the need for an index
lookup.

--
Ikai Lan
Developer Programs Engineer, Google App Engine
Blogger: http://googleappengine.blogspot.com
Reddit: http://www.reddit.com/r/appengine
Twitter: http://twitter.com/app_engine



On Tue, Oct 26, 2010 at 10:02 AM, Dan Dubois uvico...@gmail.com wrote:

 What is the absolute cheapest way (CPU cost) theoretically to run an
 SQL EXISTS query with the Datastore API?

 I imagine FetchOptions would be
 FetchOptions.Builder.withChunkSize(1).limit(1).prefetchSize(1) and
 probably option 1 below.

Query query = new Query(KIND);
//add filters and sorts here, if querying by key use
 query.setKeysOnly()
DatastoreService datastoreService =
 DatastoreServiceFactory.getDatastoreService();
PreparedQuery pq = datastoreService.prepare(query);

//Option 1
long count =

 pq.countEntities(FetchOptions.Builder.withChunkSize(1).limit(1).prefetchSize(1));

if (count == 0) {
//does not exist
}
else {
//exists
}

// or maybe
//Option 2
if (pq.asIterator().hasNext()) {
//exists
}
else {
//does not exist
}

 Is there anything cheaper?

 Best wishes,
 Dan

 --
 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.comgoogle-appengine-java%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://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.