2012-06-15 1 views
0

Ma question est: Y at-il un moyen d'implémenter la sorte de fonctionnalité de base de données (que la base de données In Memory fournit) avec java.util.collections (ArrayList/HashMap/3rd party LIB etc. .) Laissez-moi mettre un peu descriptif.IMDB (Dans la base de données de mémoire) Vs Java Collections

J'ai un compte de classe modèle avec 25 attributs différents, et je peux stocker les données de permet 5000 comptes sur ArrayList. De même que je peux conserver les données sur la base de données en mémoire en créant la table t_Account. Maintenant, je veux mettre en œuvre certaines opérations de base comme mentionné ci-dessous

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

  2. Filtrer les comptes modèles spécifiques en fonction de différents critères de filtre de chaque attribut? (application des conditions WHERE/AND sur une table dans SQL)

  3. Recherche de compte spécifique en fonction d'un attribut spécifique? (Application des opérations telles que sur la table dans SQL)

En bref mon principal objectif est d'atteindre la base de données de la mémoire dans les fonctions relatives à l'aide de Java, qui devrait être aussi bon que dans les opérations de base de données de la mémoire?

Merci à l'avance pour votre temps et de suggestion ...

Répondre

0

Bien sûr, vous pouvez faire partie de ce que la base de données ne en mémoire tant que vous ne

  • veulent mettre en œuvre complexe interrogation

  • look pour les performances sur les grands ensembles de données: indices complexes (y compris leur entretien) ne sont pas une chose facile

Mais 5000 enregistrements est un très petit ensemble, donc vous pouvez 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.sort(). 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 les 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 votre besoin. Si cela s'adapte facilement en RAM et que vous n'avez pas besoin de conserver 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

Merci pour une suggestion rapide, je viens de mettre 5000 par exemple, il peut aller jusqu'à 20k-25k. ci-dessous est plus de détails – javakid1212

+0

Si elle s'intègre facilement dans la RAM et vous n'avez pas à 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. –

+0

Merci pour la réponse rapide, je viens de mettre 5000 par exemple, il peut aller jusqu'à 20k-25k. ci-dessous est plus de détails 1. Pour aller chercher les données, il se peut que je doive utiliser des filtres basés sur des critères différents, donc dans ce cas, je dois parcourir toute la liste. 2. Je peux utiliser la méthode sort() mais il se peut que j'aie besoin de l'implémenter pour chaque propriété. 3. Y a-t-il une meilleure approche pour appliquer une action sur List au lieu d'itérer à travers chaque élément? comme par exemple Un attribut de la classe Compte est "type", donc quand je veux une sous-liste de tous les comptes en passant comme "vérification/sauvegarde" au lieu d'itérer tous les éléments, cela devrait donner des résultats – javakid1212

0

Les DB Java Java purs HSQLDB et H2 peuvent fonctionner complètement en mémoire (et ils sont assez rapides bien qu'ils ne soient pas natifs).

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 Embedded SQL 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 à :memory, vous obtiendrez deux bases de données en mémoire différentes. Je ne vois pas vraiment le besoin d'utiliser des connexions en mémoire nommées parce que vous pouvez réutiliser le même objet connexion si vous avez besoin de l'utiliser à partir de différents threads et que 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.

Questions connexes