Je concevons une application Web basée sur Java et j'ai besoin d'une boutique de valeur clé. Berkeley DB semble être assez approprié pour moi, mais il semble y avoir deux dbs de Berkeley à choisir parmi: Berkeley DB Core mis en œuvre dans C et Berkeley DB Java Edition implémentée dans Pure Java. P>
La question est, comment choisir lequel utiliser? Avec Web-Apps, l'évolutivité et la performance sont très importantes (qui sait, peut-être que mon idée deviendra le prochain YouTube) et je ne pouvais trouver facilement aucun point de repère significatif entre les deux. Je n'ai pas encore familiarisé avec les carottes Java API, mais j'ai du mal à croire que cela pourrait être bien pire que les éditions Java, ce qui semble être assez agréable. P>
Si un autre magasin de la valeur clé serait bien meilleur, n'hésitez pas à recommander cela aussi. Je stocke des blobs binaires plus petits et les clés seront probablement des haubes des données, ou une autre pièce d'identité unique. P>
5 Réponses :
Si vous dérivez une interface commune à ceux-ci et que vous avez un ensemble approprié d'essais unitaires, vous devriez pouvoir échanger entre les deux de manière triviale à une date ultérieure (peut-être lorsque vous devez vraiment prendre une décision en fonction des faits durs que ne sont pas disponibles en ce moment) p>
Juste un avertissement à cela: les bases de données elles-mêmes seront pas i> être portables entre les versions. Si vous descendez cette route, vous aurez besoin d'une stratégie de migration pour les données elle-même si vous souhaitez échanger des implémentations. Pour cette raison, si la portabilité dans les données est importante, vous ferez mieux d'aller avec Berkeley DB et l'API Java sur l'édition Java.
J'ai fait face au même problème et j'ai décidé d'aller avec l'édition Java, principalement en raison de sa portabilité (j'ai besoin de quelque chose qui risquerait de courir même sur des appareils mobiles). Il existe également l'API de la couche de persistance directe (DPL) et le fait que l'ensemble de la DB est un seul pot fait de son déploiement assez simple. P>
La version récente 4 apportée à haute disponibilité et améliorations de performance. Il y a aussi le fait que des applications Java à long terme puissent atteindre une telle optimisation, afin de dépasser les performances des applications C natif C dans certains scénarios. P>
C'est un ajustement naturel pour n'importe quelle application Java - Desktop ou Web. P>
I, il y a si j'avais la même question, après avoir fait des points de repère, j'ai trouvé que le mode hachage dans l'édition native est beaucoup plus rapide et efficace que tout ce que l'édition Java n'a à offrir, donc j'ai décidé d'aller avec la mise en œuvre native. . p>
Je vous suggère de faire vos propres points de repère pour les capacités de stockage que vous attendez et décidez si l'édition Java est assez rapide. P>
Si c'est le cas, ou si la performance n'est pas un gros problème pour vous (c'est essentiel pour moi), allez-y avec l'édition Java. sinon aller avec le natif (en supposant que vous voyiez la même performance boost pour votre propre cas d'utilisation). P>
BTW: Mon indice de référence a été testé la vitesse d'interrogation des touches aléatoires sur 20 000 000 enregistrements, où la clé est une chaîne et la valeur est un int (4 octets). J'ai vu que les insertions (peupler le repère) étaient beaucoup plus rapides avec la version native et les requêtes étaient deux fois plus rapides. P>
(Ce n'est pas dû à la lacune Java, mais parce que la version Java n'est pas de la même version que la version natale - 4.0 VS 4.8 IIRC). P>
J'ai un peu d'expérience en utilisant BDB-JE et BDB-Core avec Java. Décider lequel utiliser est assez simple: si vous voulez une concurrence, utilisez BDB-JE. Si vous voulez une évolutivité, utilisez BDB-CORE. P>
BDB-JE décompose la performance-sage avec de grandes bases de données en raison de son format de fichier et de sa dépendance à la collecte de la poubelle Java pour nettoyer les entrées de cache expulsées. Attendez-vous à des pauses de la collecte de déchets longues ou passez beaucoup de temps à régler les paramètres de GC Magic GC. Le format de fichier a également des problèmes, car les threads de nettoyage de fond doivent dépenser beaucoup de temps à nettoyer les ordures créées par des expulsions de cache précoces. Si votre base de données convient à la RAM, BDB-JE fonctionne assez bien. P>
BDB-CORE s'appuie sur une stratégie de verrouillage de la page et des applications hautement concurrentes présentent de nombreuses impasse. Si vous pouvez commander des opérations de commande au hasard, il réduit le potentiel de blocage, mais cela ne l'élimine jamais. Étant donné que BDB-Core stocke des données de manière plus traditionnelle, elle échoue aux super grandes tailles avec une dégradation de performance prévisible et attendue. Parce que son cache n'est pas géré par un collecteur à ordures, il peut être assez grand et ne causer aucune pause. P>
J'ai décidé d'aller avec l'édition Java, simplement parce qu'il est possible d'intégrer le temps d'exécution de la base de données dans le même déploiement. C'était une caractéristique importante pour ma configuration. Je n'ai pas été comparé entre Core et Jeffre, mais j'ai vu de grandes performances par rapport à d'autres magasins de valeurs clés que j'ai testés lors de la première évaluation des magasins de base de données. p>
Si vous créez une application Web, alors la simultanéité pourrait être très importante pour vous à long terme. p>