Domaine problématique strong> p>
Je travaille sur une application assez grosse, qui utilise un modèle de données hiérarchique. Il faut des images, extrait les caractéristiques des images et crée des objets d'analyse sur ceux-ci. Donc, le modèle de base est comme un objet- (1: N) -Image_features- (1: 1) -Image. Mais le même ensemble d'images peut être utilisé pour créer plusieurs objets d'analyse (avec différentes options). P>
Ensuite, un objet et une image peuvent avoir beaucoup d'autres objets connectés, comme l'objet d'analyse pouvant être affiné avec des données supplémentaires ou des conclusions complexes (solutions) peuvent être basées sur l'objet d'analyse et d'autres données. p>
Ceci est un croquis de la solution. Les piles représentent des ensembles d'objets, les flèches représentent des pointeurs (c'est-à-dire des caractéristiques d'image sur leurs images, mais pas vice versa). Certaines parties: images, caractéristiques d'image, données supplémentaires, peuvent être incluses dans plusieurs objets d'analyse (car l'utilisateur souhaite effectuer une analyse sur différents ensembles d'objet, combinés différemment). p>
Les images, les fonctionnalités, les données supplémentaires et les objets d'analyse sont stockés dans le stockage global (objet de Dieu). Les solutions sont stockées des objets d'analyse à l'intérieur du moyen de composition (et contiennent des fonctions de solution à son tour). P>
Toutes les entités (images, caractéristiques d'image, objets d'analyse, solutions, données supplémentaires) sont des instances de classes correspondantes (comme IImage, ...). Presque toutes les pièces sont facultatives (c'est-à-dire que nous voudrions peut-être jeter les images après avoir une solution). p>
Solution actuelle inconortations forte> p>
J'aimerais construire un modèle de données plus extensible (2) et flexible (1). La première idée était d'utiliser un modèle relationnel, de séparer des objets et de leurs relations. Et pourquoi ne pas utiliser de RDBMS ici - SQLite semble moi un moteur approprié pour moi. Donc, des relations complexes seront accessibles par simple (gauche) jointure sur la base de données: pseudocode " la question forte> p>
alors ma question principale est p>
Si RDBMS est correct, j'apprécierais tout conseils sur l'utilisation des RDBMS et une approche relationnelle pour stocker les relations d'objets C ++. P> P>
images joindre images_to_image_features joindre image_features joindre image_features_to_Objects joinks jointure jointure solutions jointure_features ornvection d'objets C ++ réels pour des fonctions de solution de Stockage global par ID. P>
4 Réponses :
Juste basé sur le diagramme, je suggérerais qu'une solution SMDBMS fonctionnerait effectivement. Cela fait des années depuis que j'étais développeur sur une TDRS (appelé RDM, bien sûr!), Mais j'ai pu renouveler mes connaissances et gagner de très nombreuses perspectives de précieuses dans la structure de données et la mise en page très similaire à ce que vous décrivez en lisant le fabuleux Réservez "L'art de SQL" de Stephane Faroult. Son livre contribuera grandement à répondre à vos questions. P>
J'ai inclus un lien sur Amazon, pour assurer la précision: http://www.amazon.com/the-art-sql-stephane-faroult/dp/0596008945 p>
Vous n'aurez pas mal en le lisant, même si cela ne résoudra pas pleinement votre problème, car l'auteur fait un si grand travail de rupture d'une relation de manière claire et présentant des solutions élégantes. Le livre n'est pas un manuel pour SQL, mais une analyse approfondie de la façon de penser des données et de la manière dont elle interdite. Vérifiez-le! P>
Utilisation d'un RDBM pour suivre les liens entre les données peut être un moyen efficace de stocker et de penser à l'analyse que vous recherchez et que les liens sont "doux" - c'est-à-dire qu'ils s'en vont lorsque les objets durs qu'ils sont liés. supprimé. Cela garantit l'intégrité des données; et MSSR Fauroult peut répondre à ce qu'il faut faire pour que cela reste vrai. P>
Merci d'avoir répondu! Je vérifierai le livre dès que je l'obtiens. Pouvez-vous penser à des inconvénients ou de points difficiles de mise en œuvre de la SMDBMS SOUTON (non couvert par le livre)?
Je ne peux pas penser à des inconvénients spécifiques autres que les données sont stockées sur le disque à l'aide du moteur RDBMS et non entièrement contenus dans la mémoire - mais bien sûr qu'un avantage peut à la place. La partie la plus difficile consistera à établir correctement les relations et à les maintenir lorsque des données sont supprimées; Mais ces choses que le livre fait un bon travail décrivant.
http://www.boost.org/ Doc / Libs / 1_51_0 / LIBS / MULTI_IDEX / DOC / INDEX.HTML P>
"Vous mettrez beaucoup d'efforts à maintenir la cohérence de ces pointeurs et mis à jour constamment les liens lorsque quelque chose change. " P> blockQuote>
Avec l'aide de Boost.MultiDex, vous pouvez créer presque tous les types d'index sur une "table". Je pense que le problème cité n'est pas si grave. La solution originale est donc gérable. P>
Merci pour la réponse, mais je ne peux pas voir tout de suite comment je pourrais utiliser Multi_index pour mon problème. Pourriez-vous clarifier un peu, s'il vous plaît?
Vous voudrez peut-être examiner les technologies Web sémantiques, telles que le RDF, les RDF et le hibou qui fournissent une voie alternative et extensible de modéliser le monde. Il existe des magasins triples open-source disponibles et certains des RDBM traditionnels ont également des capacités de Triple Store. P>
En particulier, jetez un coup d'œil au tutoriel de Manchester Universités Protege / Owl: http: // owl.cs.manchester.ac.uk/Tutorials/proteguewolbutorial/ p>
Et si vous décidez que cette direction vaut la peine d'être examinée plus loin, je peux recommander "Web sémantique pour l'ontologue de travail" p>
Le tutoriel de hibou est excitant! Merci pour la réponse. Cela prendra du temps pour moi de lire et de comprendre, ainsi que de la solution de ShipR. Peut-être que je devrais créer deux primes ..;)
Je ne recommande pas les RDBMS en fonction de vos besoins pour un modèle extensible et flexible. p>
Je recommande vivement d'utiliser la programmation Standard C ++ OO avec STL. p>
Tous les points très basiques, mais je pense que vos efforts seraient mieux utilisés si vous améliorez la solution actuelle plutôt que de rechercher une solution à base de DB. P>
J'ai effectivement fini par tout faire en C ++ sans DBS. Juste plus d'abstraction et de code plus générique. Merci pour votre réponse.
Salut Steed. Ce que vous demandez est une question vraiment difficile. Vous posez également de nombreuses questions, pas une. Que faites-vous référence à un modèle de données? Avez-vous l'intention d'utiliser le modèle de données sur le réseau, écrivez-le au fichier, en mémoire? Sans plus de détails et une question spécifique, les réponses deviennent encore plus difficiles
J'ouvre un fichier, crée une structure de données, utilisez-le, enregistrez-le dans un fichier. Par "modèle de données", je veux dire stocker des informations sur les objets du monde et les relations entre eux en mémoire. Je vais essayer de modifier la question à vous concentrer sur une seule question.
Si j'ai besoin d'améliorer la question plus loin (comment?), S'il vous plaît laissez-moi savoir.
Vous semblez combiner une description de ce que vous essayez de faire, une description d'une solution que vous proposez et une question sur la solution à utiliser. Celles-ci peuvent toutes être des parties utiles d'une bonne question, mais je pense que vous devez les séparer un peu plus et clarifier exactement ce que vous demandez.
J'essaie juste de comprendre la structure de votre solution actuelle. Lorsque vous dites une "structure comme une arbre", voulez-vous dire que cela se fait dans une seule classe? Ou est-ce une collection de classes connexes? "Les données sont dupliquées" => pourquoi donc? Pourquoi ne maintenez-vous pas de lien avec les données pertinentes plutôt que de le faire dupliquer? "Beaucoup de travail devrait être fait, si vous avez une feuille" => Cela signifie-t-il que plus de mise en œuvre fonctionne ou plus de temps pour courir? En gros, recherchez-vous une optimisation temporelle ou une solution plus sécurisable / facilitée?
@PermanentGuest, Tletnes, j'ai une fois de plus la question pour essayer de répondre à vos demandes.
@Steed: Cette question semble maintenant beaucoup mieux. J'essaierais de répondre en un ou deux jours, mais certainement maintenant, vous obtiendriez de bonnes réponses des autres.
Regardez ici aussi oodbms: en.wikipedia.org/wiki/Object_database
@wingman, merci. À première vue, la gigabase semble prometteuse.