2009-12-19 6 views
8

Existe-t-il des DB pour Java pouvant être exécutés en mode intégré, certaines tables étant stockées en mémoire lors du chargement d'autres disques? H2 et JavaDB semblent être les deux leaders pour les DB Java et je sais qu'ils ont tous les deux un mode en mémoire, mais vous font-ils charger toute la DB en mémoire ou pouvez-vous décider table par table?DB Java en mémoire

Répondre

6

Ceci est la table en cache FAQ mentionné sur le site HSQL.

• Est-ce magasin HSQLDB toutes les données en mémoire. Est-ce que la mémoire ne fonctionne comme conséquence?

• Il stocke toutes les données en mémoire que si vous voulez. Par par défaut, les résultats CREATE TABLE dans une table de mémoire, car c'est le meilleur type pour les petites tables. Pour les tables plus grandes, utilisez CREATE CACHED TABLE et ajustez la taille du cache pour adapter vos besoins d'utilisation de la mémoire (aussi peu que 8 Mo). Voir le chapitre Problèmes de gestion et de déploiement du système du Guide. Il n'y a pas de règle simple et aucune imposition de la part de HSQLDB car une flexibilité maximale est autorisée en utilisant seulement quelques paramètres. Une utilisation courante de HSQLDB est pour les applications OLAP, ETL et d'exploration de données où des allocations de mémoire Java énormes sont utilisées pour contenir des millions de lignes de données en mémoire.

Je pense que la table mise en cache est déjà assez puissante pour répondre à vos besoins.

De http://hsqldb.org/web/hsqlFAQ.html

entre la table de comparation cache et table mémoire

tables MEMORY et tables CACHED sont généralement utilisés pour le stockage des données. La différence entre les deux est la suivante:

Les données de toutes les tables MEMORY sont lues à partir du fichier * .script lorsque la base de données est démarrée et stockée en mémoire. En revanche, les données des tables mises en cache ne sont pas lues en mémoire tant que la table n'a pas été accédée. De plus, seule une partie des données de chaque table CACHED est conservée en mémoire, ce qui permet d'avoir plus de données que ce qui peut être stocké en mémoire.

Lorsque la base de données est arrêtée normalement, toutes les données des tables MEMORY sont écrites sur le disque. En comparaison, les données des tables CACHED qui ont été modifiées sont écrites pendant l'opération et à l'arrêt.

La taille et la capacité du cache de données pour toutes les tables CACHED sont configurables. Cela permet d'autoriser la mise en cache de toutes les données des tables CACHED en mémoire. Dans ce cas, la vitesse d'accès est bonne, mais légèrement plus lente que les tables MEMORY.

Pour les applications normales, il est recommandé d'utiliser des tables MEMORY pour de petites quantités de données, en laissant les tables CACHED pour les grands ensembles de données. Pour les applications spéciales dans lesquelles la vitesse est primordiale et où une grande quantité de mémoire disponible est disponible, les tables MEMORY peuvent également être utilisées pour les grandes tables.

Il semble que cette fonctionnalité n'est pas encore supportée par H2 et Derby (JavaDB). Corrigez-moi si ce n'est pas le cas.

1

La plupart des bases de données en mémoire (comme HSQLDB ont la capacité de mettre en cache certaines (ou toutes) les données sur le disque. Habituellement, il est suffisamment bas il est transparent pour le programmeur, mais est certainement configurable

+0

Y a-t-il des documents auxquels vous pourriez me diriger? D'après ce que j'ai vu sur le site H2, la mémoire ne fonctionne que si la base de données n'est pas persistante. –

+0

Vous pouvez regarder la Terracotta http://www.terracotta.org/ – Bostone

+0

@DroidIn.net Terracotta est commercial? Et c'est une sorte de cache pas DB, non? –