J'évalue actuellement l'intégration de Spring-db4o. J'ai été impressionné par le support des transactions déclaratives ainsi que la facilité de fournir une configuration déclarative.Comment puis-je configurer les index pour utiliser db4o avec Spring?
Malheureusement, j'ai du mal à comprendre comment créer un index sur des champs spécifiques. Spring prépare la base de données pendant le démarrage du serveur Tomcat. Voici mon entrée de printemps:
<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 ne fournit aucun moyen pour spécifier l'index. J'ai écrit un simple ServiceServletListener pour définir l'index. Voici le code correspondant:
Db4o.configure().objectClass(com.test.Metadata.class).objectField("id").indexed(true);
Db4o.configure().objectClass(com.test.Metadata.class).objectField("value").indexed(true);
I inséré autour de 6000 lignes dans ce tableau, puis utilisé une requête SODA pour récupérer une ligne basée sur la clé. Mais la performance était plutôt mauvaise. Pour vérifier que les indices ont été appliqués correctement, je courais le programme suivant:
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! ");
}
}
}
}
Malheureusement, les résultats montrent que aucun champ est indexé. Dans un contexte similaire, dans le navigateur OME, j'ai vu qu'il y avait une option pour créer un index sur les champs de chaque classe. Si je mets l'index à true et enregistre, il semble appliquer le changement à db4o. Mais encore une fois, si vous exécutez cet exemple de test sur le fichier db4o, il ne révèle aucun index.
Tout pointeur sera très apprécié.