У меня есть приложение веб-сервера Java, которое обновляет объекты в базе данных каждые 10 секунд или около того.
Я заметил, что при обновлении, даже если не применяются никакие изменения, почти каждый раз, когда размер базы данных увеличивается на несколько КБ.
Я использовал их пример здесь: http://community.versant.com/documentation/reference/db4o-8.0/java/tutorial/docs/Structured.html#outline39
Я пытался дефрагментировать базу данных, но это не уменьшало ее до исходного размера с тем же количеством объектов в ней.
Может кто-нибудь сказать мне, как предотвратитьэто / что я, возможно, делаю неправильно?
РЕДАКТИРОВАТЬ:
Это часть моего кода, где я обновляю или сохраняю объект (устройство в данном случае):
try {
LinkedList<Device> lDevices = Sense.getDevices();
if (lDevices.size() == 0) {
return;
}
db = Db4o.getDatabaseClient();
for (Device device : lDevices) {
List<Device> query = db.queryByExample(new Device(device.getDeviceId()));
if (query.size() == 1) {
//store changes
Device found = query.get(0);
found.setBatteryLevel(device.getBatteryLevel());
found.setLastknownLocation(device.getLastknownLocation());
found.setType(device.getType());
db.store(found);
} else {
// store new Device
db.store(device);
}
}
} catch (Exception e) {
} finally {
if (db instanceof ObjectContainer) {
db.close();
}
}
Но теперь я узнал с помощью браузера базы данных плагина Eclipse db4o, что класс Location, находящийся в объекте Device, обновляется и снова сохраняется в базе данных.
Итак, у меня 2 устройства и 2 Locations всначала база данных, после первого обновления в базе 2 устройства и 4 местоположения !!Это сводит меня с ума!
Кто-нибудь знает, почему это происходит?