Sorry for the previous mail, I inadvertently sent it half-ready :-(
Hello,
I made a small performance test comparing different Cayenne solutions with JDBC 
solutions. What I found was that in Insert operations, it is best to use 
Cayenne data objects (as opposed to raw SQL queries), while for Update and 
Delete the case is the opposite. I guess this may not surprise you :-)
So for Insert, this worked best for me:
 
public void insertRecords(int count) {
    Date date = new Date();
    for (int index = 1; index <= count; index++) {
        TestData testData = (TestData) context.newObject(TestData.class);
        testData.setName(nextName());
        testData.setDescription(nextDescription());
        testData.setCount(new Integer(count - index));
        testData.setCreated(date);
        if (index % 1000 == 0) {
            context.commitChanges();
        }
    }
    context.commitChanges();
}

while for Update and Delete, something like this:
 

public void updateRecords(int lowerLimit, int upperLimit) {
    final SQLTemplate query = new SQLTemplate(TestData.class,
        "update test_data set description = '$desc' where count > $lower and 
count < $upper");
    Map params = new HashMap();
    params.put("desc", nextDescription());
    params.put("lower", new Integer(lowerLimit));
    params.put("upper", new Integer(upperLimit));
    context.performNonSelectingQuery(query.createQuery(params));
}

Any hints on how to make these methods faster?
Thanks in advance,
Péter
 

Reply via email to