org.prevayler.demos.scalability.TransactionTestRun Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of prevayler-scalability Show documentation
Show all versions of prevayler-scalability Show documentation
A test of query and transaction throughput.
The newest version!
package org.prevayler.demos.scalability;
/** Tests insert, update and delete scalability.
*/
public class TransactionTestRun extends ScalabilityTestRun {
private int halfTheObjects;
public TransactionTestRun(ScalabilityTestSubject subject, int numberOfObjects, int minThreads, int maxThreads) {
super(subject, numberOfObjects, minThreads, maxThreads);
}
protected String name() {
return "Transaction Test";
}
protected void prepare() {
super.prepare();
halfTheObjects = numberOfObjects / 2;
}
/**
* Deletes records from id zero to id halfTheObjects - 1.
* Updates records from id halfTheObjects to id numberOfObjects - 1.
* Inserts records from id numberOfObjects to id numberOfObjects + halfTheObjects - 1.
* Every time halfTheObjects operations have completed, all ranges are shifted up by halfTheObjects.
* Example for one million objects:
* Deletes records from id 0000000 to id 0499999.
* Updates records from id 0500000 to id 0999999.
* Inserts records from id 1000000 to id 1499999.
* Every time 500000 operations have completed, all ranges are shifted up by 500000.
*/
protected void executeOperation(Object connection, long operationSequence) {
Record recordToInsert = new Record(numberOfObjects + operationSequence);
long idToDelete = spreadId(operationSequence);
Record recordToUpdate = new Record(halfTheObjects + idToDelete);
((TransactionConnection)connection).performTransaction(recordToInsert, recordToUpdate, idToDelete);
}
/** Spreads out the id values so that deletes and updates are not done contiguously.
*/
private long spreadId(long id) {
return (id / halfTheObjects) * halfTheObjects //Step function.
+ ((id * 16807) % halfTheObjects); //16807 == 7 * 7 * 7 * 7 * 7. 16807 is relatively prime to 50000, 500000 and 5000000. This guarantees that all ids in the range will be covered.
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy