IMDB (Base De Données En Mémoire) Vs Collections Java


Ma question est la suivante: Existe-t-il un moyen d'implémenter une fonctionnalité de type base de données (fournie par la base de données en mémoire) avec java.util.collections (ArrayList/HashMap/3ème partie LIB, etc...) Permettez-moi de mettre un peu descriptif.

J'ai un compte de classe Model avec 25 attributs différents, et je peux stocker les données de disons 5000 comptes sur ArrayList. De la même manière, je peux conserver les données dans la base de données en mémoire en créant la table t_Account. Maintenant, je veux implémenter certaines opérations de base comme mentionné ci-dessous

  1. Tri par ordre croissant / décroissant en fonction de chaque attribut. (par exemple, Ordre par opération de SQL)

  2. Filtrer les comptes de modèles spécifiques en fonction de différents critères de filtrage de chaque attribut? (appliquer les conditions WHERE/AND sur la table en SQL)

  3. Recherche d'un compte spécifique basé sur un attribut spécifique? (appliquer des opérations SIMILAIRES sur une table en SQL)

En bref, mon objectif principal est de réaliser la base de données en mémoire fonctionnalités connexes utilisant Java, qui devrait être aussi bon que Dans les opérations de base de données en mémoire?

Merci d'avance pour votre temps précieux et suggestion...

Author: javakid1212, 2012-06-15

2 answers

Bien sûr, vous pouvez faire une partie de ce que fait une base de données en mémoire tant que vous ne le faites pas

  • Vous voulez implémenter des requêtes complexes

  • Recherchez des performances sur de gros ensembles de données: les index complexes (y compris leur maintenance) ne sont pas une chose facile

Mais 5000 enregistrements est un très petit ensemble, vous pouvez donc probablement les gérer en mémoire avec des fonctions et des index personnalisés sans difficulté. Le tri, le filtrage, la recherche sont facilement implémentés sur de petits ensembles dans n'importe quelle langue.

Vous semblez utiliser java ("ArrayList"), regardez Collections.trier () . Le tri d'une petite collection est rapide tant que vos fonctions de comparaison sont rapides.

D'autre part, l'utilisation d'une petite base de données comme sqlite est également facile. Si vous n'êtes pas sûr, vous pouvez commencer avec la solution java et intégrer des outils externes plus tard si un profilage montre que vous ne pouvez pas gérer votre base de données en mémoire suffisamment efficacement pour vos besoins. S'il tient facilement dans la RAM et que vous n'avez pas à le faire persister les données, essayez de le faire en mémoire. La première raison d'utiliser une base de données est la persistance. Au contraire, si vous devez conserver les enregistrements entre les démarrages (ou les plantages) de votre programme, utilisez une base de données.

 0
Author: Denys Séguret, 2012-06-15 06:38:36

Les deux HSQLDBet H2 pures bases de données Java SQL peuvent fonctionner complètement en mémoire (et elles sont assez rapides bien qu'elles ne soient pas natives).

Chaînes de connexion, HSQLDB: jdbc:hsqldb:mem:, H2: jdbc:h2:mem:. Vous pouvez ajouter un identifiant après eux pour créer des bases de données en mémoire qui prennent en charge plusieurs connexions dans la même machine virtuelle.

La BASE de données SQL embarquée native, SQLite, peut également fonctionner complètement en mémoire et le pilote Xerial SQLite utilise la chaîne de connexion jdbc:sqlite::memory:. Notez que SQLite n'autorise pas d'identifiant après :memory: et si vous ouvrez deux connexions dans la même machine virtuelle vers :memory, vous obtiendrez deux bases de données en mémoire différentes.

Je ne vois pas de réel besoin d'utiliser des connexions en mémoire nommées car vous pouvez réutiliser le même objet de connexion si vous devez l'utiliser à partir de threads différents et les trois bases de données ci-dessus sont thread-safe.

La base de données intégrée Firebird ne fournit pas de bases de données en mémoire.

 0
Author: Bill Burdick, 2016-07-16 09:08:46