Я сейчас оцениваю интеграцию Spring-db4o.Я был впечатлен поддержкой декларативных транзакций, а также простотой предоставления декларативной конфигурации.
К сожалению, я изо всех сил пытаюсь понять, как создать индекс для определенных полей.Spring готовит БД во время запуска сервера Tomcat.Вот моя весенняя запись:
<bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean">
<property name="configuration" ref="db4oConfiguration" />
<property name="databaseFile" value="/WEB-INF/repo/taxonomy.db4o" />
</bean>
<bean id="db4oConfiguration" class="org.springmodules.db4o.ConfigurationFactoryBean">
<property name="updateDepth" value="5" />
<property name="configurationCreationMode" value="NEW" />
</bean>
<bean id="db4otemplate" class="org.springmodules.db4o.Db4oTemplate">
<constructor-arg ref="objectContainer" />
</bean>
db4oConfiguration не предоставляет никаких средств для указания индекса.Я написал простой ServiceServletListener для установки индекса.Вот соответствующий код:
Db4o.configure().objectClass(com.test.Metadata.class).objectField("id").indexed(true);
Db4o.configure().objectClass(com.test.Metadata.class).objectField("value").indexed(true);
Я вставил около 6000 строк в эту таблицу, а затем использовал запрос SODA для получения строки на основе ключа.Но производительность была довольно плохой.Чтобы проверить правильность применения индексов, я запустил следующую программу:
private static void indexTest(ObjectContainer db){
for (StoredClass storedClass : db.ext().storedClasses()) {
for (StoredField field : storedClass.getStoredFields()) {
if(field.hasIndex()){
System.out.println("Field "+field.getName()+" is indexed! ");
}else{
System.out.println("Field "+field.getName()+" isn't indexed! ");
}
}
}
}
К сожалению, результаты показывают, что ни одно поле не проиндексировано.
В аналогичном контексте в браузере OMEЯ видел, что есть возможность создать индекс для полей каждого класса.Если я поверну индекс в true и сохраню, он, кажется, применяет изменение к db4o.Но опять же, если запустить этот пример теста для файла db4o, он не обнаружит никакого индекса.
Любые указатели на это будут высоко оценены.