When changes are required to be made to an underlying RDBMS datastore, statements are sent via JDBC.
A statement is, in general, a single SQL command, and is then executed. In some circumstances
the statements due to be sent to the datastore are the same JDBC statement several times. In this case
the statement can be
batched
. This means that a statement is created for the SQL, and it is
passed to the datastore with multiple sets of values before being executed. When it is executed
the SQL is executed for each of the sets of values. DataNucleus allows statement batching under certain
circumstances.
The maximum number of statements that can be included in a
batch
can be set via a persistence
property
datanucleus.rdbms.statementBatchLimit
. This defaults to 50. If you set it to -1 then there is
no maximum limit imposed. Setting it to 0 means that batching is turned off.
It should be noted that while batching sounds essential, it is only of any possible use
when the exact same SQL is required to be executed more than 1 times in a row. If a different SQL
needs executing between 2 such statements then no batching is possible anyway.
. Let's take an example
INSERT INTO MYTABLE VALUES(?,?,?,?)
INSERT INTO MYTABLE VALUES(?,?,?,?)
SELECT ID, NAME FROM MYOTHERTABLE WHERE VALUE=?
INSERT INTO MYTABLE VALUES(?,?,?,?)
SELECT ID, NAME FROM MYOTHERTABLE WHERE VALUE=?
In this example the first two statements can be batched together since they are identical and nothing
else separates them. All subsequent statements cannot be batched since no two identical statements
follow each other.
The statements that DataNucleus currently allows for batching are
-
Delete of objects
-
Insert of container elements/keys/values
-
Delete of container elements/keys/values