Versions utilisées: Neo4j 3.0.6 avec le printemps-données-Neo4j 4.2.0.M1 pour la cartographie POJOmodélisation des données Neo4j: nœuds privés appartenant, les relations riches, serrures
Je suis en train de choisir la façon de modéliser les données avec neo4j et comparer les avantages/inconvénients des différentes solutions.
Exigences:
- Un film a une liste dynamique des métadonnées (a métadonnées a 3 propriétés: 'clé', 'valeur', 'locale'). Le nombre de métadonnées d'un film n'est pas connu à l'avance, pas plus que les clés possibles. Ils doivent être séparables des autres propriétés techniques Movie car ils sont localisés et considérés comme des données métier. Les métadonnées sont la propriété du film et sont toujours accessibles depuis le film. Ils ne peuvent pas être partagées avec d'autres films
- Les requêtes rapides chercher doit être possible sur les métadonnées des valeurs
exemple des métadonnées de film:
Movie metadata
locale 'en_GB':
title: 'Jurassic Park'
description: 'description in english'
locale 'fr_FR':
description: 'description en francais'
locale 'none':
actor: 'Jeff Goldblum'
- Un nœud par metadata (avec 3 propriétés par noeud: 'clé', 'valeur', 'locale')
- Inconvénient: concept de privé appartenant à mettre en œuvre (suppression des nœuds orphelins de métadonnées à gérer manuellement, car non pris en charge par ressort données Neo4j/Neo4j-ogm)
Solution B
- Un nœud unique par locale (avec une propriété: 'locale') (exemple: 'fr')
- métadonnées comme relations riches (avec deux relations properti es: 'key', 'valeur')
- Inconvénient: pour créer la relation, une serrure doit être prise sur le noeud Locale
Est-ce que quelqu'un a une expérience sur la solution B? À quel point faut-il verrouiller un nœud qui sera partagé par un million d'autres nœuds? Quel est l'impact de sur les performances et l'évolutivité?
Est-ce que quelqu'un a une meilleure solution de modélisation ?
Il serait utile d'en savoir un peu plus sur les métadonnées. Chaque utilisateur a-t-il ses propres métadonnées sur un film ou n'est-il pas spécifique à l'utilisateur? Y a-t-il une raison pour laquelle vous ne pouvez pas stocker les métadonnées en tant que propriétés sur les noeuds de film? Certaines parties de métadonnées sont-elles censées agir comme des balises (ce qui signifie que vous pouvez interroger des métadonnées vers des films)? Ou allez-vous seulement accéder aux métadonnées d'un film plutôt que directement? – InverseFalcon
Non, les métadonnées ne sont pas spécifiques à l'utilisateur. Mais ils sont localisés (je n'ai pas mentionné cela pour simplifier). Je pense que la seule façon de stocker des métadonnées sur les nœuds de films est à l'intérieur des tableaux, n'est-ce pas? Mais cela ne serait pas efficace pour récupérer des requêtes. Nous devons être en mesure de filtrer les films en fonction de leurs métadonnées. Et oui, nous accédons toujours aux métadonnées d'un film. – tigrou83
Je ne suis pas exactement sûr de ce que vous voulez dire en ne pouvant stocker que des métadonnées dans des tableaux. Y at-il une raison pour laquelle vous ne pouvez pas simplement définir des propriétés sur vos noeuds de film? Vous pouvez toujours filtrer sur les propriétés de noeud dans vos clauses WHERE. Je suis toujours curieux de savoir quel type de métadonnées est censé être ... ce qui le différencie des propriétés du noeud que vous envisagiez d'utiliser? Pouvez-vous donner quelques exemples de ces métadonnées? – InverseFalcon