We were looking at some profiles running on large databases and
noticed that under some circumstances BitField operations are taking a
large percentage of time when opening the database.
Particularly the BitField class is implemented using "long" data type
for bit storage. However when it gets used from the DiskFile class
getSummary() and initFromSummary() methods they are using bytes. The
code there basically moves the data from the longs into the bytes bit
by bit which is very inefficient. It would be very easy to modify the
BitField class to utilize the byte[] for storage and use this byte[]
directly to store/restore the allocation table.
We also noticed that sometimes the BitField.setRange method is also
taking considerable time.
I guess there should be a way to optimize it as well using byte/long
operations rather than iterating the range bit by bit.
Below are the code snippets in question:
initFromSummary:
======================================================
for (int i = 0, x = 0; i < b2 / 8; i++) {
int mask = in.read();
if (init) {
for (int j = 0; j < 8; j++, x++) {
if (used.get(x) != ((mask & (1 << j)) !=
0)) {
throw Message.getInternalError("Redo
failure, block: " + x + " expected in-use bit: " + used.get(x));
}
}
} else {
for (int j = 0; j < 8; j++, x++) {
if ((mask & (1 << j)) != 0) {
used.set(x);
}
}
}
}
======================================================
getSummary()
======================================================
for (int i = 0, x = 0; i < blocks / 8; i++) {
int mask = 0;
for (int j = 0; j < 8; j++) {
if (used.get(x)) {
mask |= 1 << j;
}
x++;
}
out.write(mask);
}
====================================================
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "H2
Database" 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/h2-database?hl=en
-~----------~----~----~----~------~----~------~--~---