Ich werte gerade die Spring-db4o Integration aus. Ich war beeindruckt von der deklarativen Transaktionsunterstützung und der einfachen Möglichkeit, eine deklarative Konfiguration bereitzustellen.Wie kann ich die Indizes für die Verwendung von db4o mit Spring konfigurieren?
Leider habe ich Probleme, einen Index für bestimmte Felder zu erstellen. Spring bereitet die Datenbank beim Start des Tomcat-Servers vor. Hier ist meine Feder Eintrag:
<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 bietet keine Mittel, den Index zu bestimmen. Ich habe einen einfachen ServiceServletListener geschrieben, um den Index zu setzen. Hier ist der relevante Code:
Db4o.configure().objectClass(com.test.Metadata.class).objectField("id").indexed(true);
Db4o.configure().objectClass(com.test.Metadata.class).objectField("value").indexed(true);
ich rund 6000 Zeilen in dieser Tabelle eingefügt und verwendet dann eine SODA-Abfrage eine Zeile abzurufen auf dem Schlüssel basiert. Aber die Leistung war ziemlich schlecht. Um sicherzustellen, dass Indizes ordnungsgemäß angewendet wurde, lief ich das folgende Programm:
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! ");
}
}
}
}
Leider sind die Ergebnisse zeigen, dass kein Feld indiziert ist.
In einem ähnlichen Kontext sah ich im OME-Browser, dass es eine Option gibt, Index für Felder jeder Klasse zu erstellen. Wenn ich den Index auf "true" und "save" setze, scheint die Änderung auf db4o anzuwenden. Wenn Sie diesen Beispieltest für die Datei db4o ausführen, wird jedoch kein Index angezeigt.
Alle Hinweise dazu werden sehr geschätzt.