2015-04-06 1 views
1

Supposons que vous puissiez lire un tas de données dans des fichiers CSV, contenant des tables liées les unes aux autres. Quelle structure d'objet Java, qui utilise les collections Java standard disponibles avec JDK, serait la plus appropriée pour représenter la base de données relationnelle en anticipant le traitement des requêtes analogues aux requêtes de bases de données les plus courantes, y compris les sélections standard, et select() , grouper par, et d'autres requêtes les plus courantes. La quantité de données est relativement petite, de sorte qu'aucun problème de mémoire ne sera anticipé, si nous gardons tout en mémoire. Je veux simplement souligner qu'il ne s'agit pas d'une question d'analyse SQL ou d'utilisation de bases de données SQL en mémoire. Il s'agit de la représentation de la base de données relationnelle back-end la plus efficace en Java, lorsque vous ne connaissez pas toutes les requêtes spécifiques à l'avance.Structure d'objet Java la plus pratique pour représenter une base de données relationnelle

+0

Je pense que le moyen le plus efficace de représenter les données relationnelles serait dans une base de données relationnelle. Pourquoi ne pas analyser votre fichier CSV dans SQLite et interroger cela? – dimo414

+0

Eh bien, c'est plus une question théorique, juste intéressé, comment le font-ils, disent-ils au sein de SQLite en interne? – user3930976

+0

que diriez-vous d'une base de données relationnelle? –

Répondre

2

Si votre question est "Quelles structures de données les bases de données, comme SQLite, utilisent-elles en interne?" la réponse est loin d'être simple, et dépend généralement de l'implémentation. Un point de vente important de différentes bases de données est la façon dont ils choisissent de structurer leurs données, après tout.

Dans le cas de SQLite, le online documentation fournit beaucoup de détails sur son fonctionnement interne. D'autres bases de données comme H2 fournissent également des notes d'implémentation dans leur documentation, mais en général, les structures de données utilisées sont spécifiques à l'utilisation et personnalisées. En termes plus théoriques, beaucoup de bases de données implémentent indexes comme B+ Trees (parmi beaucoup d'autres structures), mais ce n'est ni une exigence ni nécessairement la "bonne" façon de le faire. Les structures de données qu'ils utilisent sont le résultat de nombreuses années d'essais et d'erreurs, d'analyses comparatives et de travail acharné.


En réponse à votre commentaire:

Disons que vous avez juste un fichier CSV, juste une table, et il ne vaut pas même aller à SqlLite et H2 et tout peut être en forme à l'intérieur mémoire, donc la quantité de données n'est pas si grande. Quelle est la meilleure façon de représenter cette table en tant qu'objet java, anticipant les requêtes que vous présenterez normalement à la table de base de données, mais ne sachant pas exactement à l'avance comment vous auriez besoin de l'interroger?

Je voudrais utiliser SQLite, ou H2. Les deux peuvent être exécutés in-memory, et vous permettent d'exécuter des requêtes SQL arbitraires sur leurs données. Si vous saviez ce que vous vouliez interroger, vous pouvez analyser votre fichier CSV dans une structure de données plus spécifique, mais si vous ne savez pas comment vous comptez l'interroger, vous ne pouvez pas espérer créer une structure de données plus efficace. que les outils de base de données existants. Les bases de données sont spécifiquement conçues pour le cas d'utilisation de "Je ne sais pas quelles requêtes je vais exécuter contre ces données".