Just a note, I've heard the built in datastore admin delete code is
running much faster recently.  You might give it a shot.  I have not
tried it myself to verify it is running better though (previously it
was quite poor).



Robert




On Tue, Aug 2, 2011 at 14:54, Stephen Johnson <[email protected]> wrote:
> I use the low-level datastore to do the delete by keys.
>
> On Tue, Aug 2, 2011 at 10:52 AM, Carter Maslan <[email protected]> wrote:
>>
>> thanks; what delete do you use?
>> It looked like deletePersistentAll() accepted only entities (rather than
>> key values)
>>
>> On Tue, Aug 2, 2011 at 9:46 AM, Stephen Johnson <[email protected]>
>> wrote:
>>>
>>> Change your query to something like this:
>>> Query query = pm.newQuery("select ek from
>>> " + UploadedContent.class.getName());
>>> Where "ek" is the entity key name you use in you JDO class. For example,
>>> mine is defined like the following:
>>>
>>>     @PrimaryKey
>>>
>>>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>>>
>>>     @Extension(vendorName="datanucleus", key="gae.encoded-pk",
>>> value="true")
>>>
>>>     private String ek;
>>>
>>> Then, just query for the keys and do a batch delete on the keys. Right
>>> now you're pulling in all the entity data and then deleting the entities
>>> which is unnecessary and will slow you do a lot.
>>> Stephen
>>> CortexConnect (cortexconnect.appspot.com)
>>> On Tue, Aug 2, 2011 at 12:17 AM, Carter <[email protected]> wrote:
>>>>
>>>> Is this the most efficient code for bulk delete?
>>>>
>>>> Is there a "SELECT __key__" technique that's faster?
>>>>
>>>> This currently deletes 100 at a time, but it's slow.
>>>>
>>>>
>>>>        public long deleteBefore(Date d, long maxRecords)
>>>>                        throws DaoException {
>>>>
>>>>                PersistenceManager pm = pmf.getPersistenceManager();
>>>>                Query query = pm.newQuery(UploadedContent.class);
>>>>                query.setFilter("dateCreated < dateCreatedParam");
>>>>                query.declareParameters("Date dateCreatedParam");
>>>>                query.declareImports("import java.util.Date;");
>>>>                if (maxRecords >= 0) {
>>>>                        query.setRange(0, maxRecords);
>>>>                }
>>>>
>>>>                List<UploadedContent> entities = new
>>>> ArrayList<UploadedContent>();
>>>>                try {
>>>>                        entities = (List<UploadedContent>)
>>>> query.execute(d);
>>>>                        pm.deletePersistentAll(entities);
>>>>                } catch (Exception e) {
>>>>                        log.log(Level.SEVERE, e.getMessage(), e);
>>>>                        throw new DaoException(e);
>>>>                } finally {
>>>>                        query.closeAll();
>>>>                        pm.close();
>>>>                }
>>>>                return entities.size();
>>>>        }
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Google App Engine" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected].
>>>> 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 [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> 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 [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> 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 [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to