2010-06-24 2 views
4

J'écris une application qui analyse un fichier volumineux, génère une grande quantité de données et effectue une visualisation complexe. Comme toutes ces données ne peuvent pas être gardées en mémoire, j'ai fait des recherches et je commence à considérer les bases de données embarquées comme un conteneur temporaire pour ces données.Quand utiliser une base de données embarquée

Ma question est: est-ce une façon traditionnelle de résoudre ce problème? Et est-ce qu'une base de données embarquée (autre que la structuration des données) est censée gérer les données en gardant en mémoire seulement un sous-ensemble (comme un cache), alors que le reste est conservé sur le disque? Je vous remercie.

Modifier: pour clarifier: J'écris une application de bureau. L'application sera entrée avec un fichier de taille de 100s de Mb. Après avoir lu le fichier, l'application générera un grand nombre de graphiques qui seront visualisés. Depuis, les graphiques peuvent avoir un si grand nombre de nœuds, ils ne peuvent pas entrer dans la mémoire. Devrais-je les enregistrer dans une base de données intégrée qui prendra soin de ne garder que les données pertinentes en mémoire? (Est-ce que les bases de données intégrées le font?), Ou je devrais écrire mon propre module sophistiqué qui fait cela?

+0

Est-ce que ma réponse n'a pas résolu votre question? –

Répondre

7

Une question difficile - mais je vais partager mon expérience et vous laisser décider si cela aide.

Si vous devez conserver la sortie de traitement du fichier source, et que vous utilisez que pour produire plusieurs vues des données dérivées, alors vous pourrait envisager d'utiliser une base de données intégrée. Les raisons d'utiliser une base de données intégrée (à mon humble avis):

  • Pour tirer parti des fonctionnalités de SGBDR (ACID, les relations, les clés étrangères, les contraintes, les triggers, agrégation ...)
  • Pour faciliter l'exportation de la les données de manière flexible
  • pour permettre l'accès à vos données traitées à des clients externes (format connu)
  • pour permettre une transformation plus souple des données lors de la préparation pour la visualisation

facteurs qui vous devrait prendre en compte lors de la prise de décision:

  • Quelle est la plate-forme (s) cible (Windows, Linux, Android, iPhone, PDA)?
  • Quelle base technologique? (Java, .Net, C, C++, ...)
  • À quelles contraintes de ressources sont prévues ou doivent être conçues? (RAM, CPU, espace HD)
  • Quels comportements opérationnels avez-vous besoin de prendre en compte (connecté au réseau, déconnecté)?

Sur le bureau moderne standard, la capacité de réserve est suffisante pour gérer la plupart des opérations. Sur les eeePC, PDA et autres appareils portables, peut-être pas. Sur les appareils intégrés, très probablement pas. Le langage que vous utilisez peut avoir des fonctions intégrées pour vous aider à gérer la mémoire - peut-être pouvez-vous en profiter. L'aspect de la connectivité (état/état/etc.) peut avoir une incidence sur la quantité de mémoire que vous devez garder à un moment donné. Si vous traitez avec fichiers vraiment gros, alors vous pourriez envisager une approche de processus de streaming afin que vous ayez seulement en mémoire une petite partie des données globales à la fois - mais cela ne veut pas vraiment dire que vous devriez (ou ne devrait pas) utiliser une base de données intégrée. Le texte droit ou les fichiers binaires peuvent aussi bien fonctionner (basés sur les enregistrements, basés sur les colonnes, basés sur les lignes, etc.).

Certaines bases de données vous permettront d'interagir plus efficacement avec les données une fois qu'elles sont stockées - cela dépend du moteur. Je trouve que si vous avez beaucoup d'agrégation requise dans vos fichiers de base (je veux dire les fichiers que vous générez initialement à partir de la source d'origine) alors un moteur de SGBDR peut être très utile pour simplifier votre logique. Les autres options incluent la construction de votre transformation de base, puis l'ajout d'étapes supplémentaires pour traiter celle-ci dans d'autres magasins temporaires pour chaque vue spécifique, qui sont ensuite traitées pour le rendu au format cible (rapport?).

Juste une réponse de flux de conscience - l'espoir qui aide un peu.

Edit:

par votre plus de précisions, je ne suis pas sûr d'une base de données intégrée est la direction que vous voulez prendre. Vous devez soit faire des suppositions simplificatrices pour rendre vos graphiques ou étudier des méthodes comme la segmentation (rendre les sections du graphique puis mettre en cache la sortie avant de rendre la section suivante).

Questions connexes