-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Chargement des connections d'un Node #2
Comments
@armetiz je met ça ici pour pas perdre mes idées. Que penserais-tu de maintenir une correspondance entre Nodes/Classes. Un Node peut implémenter une méthode De cette manière nous pourrions optimiser la méthode Ce qui permettrait au développeur de ne charger que ce dont il a besoin. Exemple: Un utilisateur peut follow d'autres utilisateurs, mais aussi des tags. Si je sais reconnaitre ces nodes, je suis capable de ne charger que les connections vers les nodes qui m'intéressent. Et en maintenant ces nodes dans la config, nous pourrions facilement savoir comment les charger dans un repository: kitano_connection:
nodes:
user: { class: My\Entity\User }
tag: { class: My\Entity\Tag } Ce qui constitue un registre que nous pouvons injecter dans les repositories. Alors j'ai pas trop approfondie l'idée pour chercher les limitations. Je la pose là comme ça pour pas la paumer. |
Justement en parlant du chargement, j'ai peur que le chargement de plusieurs Connection et Node soit source de perte de perfomance.. A voir en fonction du nombre de type de Node possible... |
Ouais en devenant complexe, le Graph peut causer de grave problèmes de perfs :/ Tu peux décrire ton idée ici ? Celle dont tu m'as parlé sur IRC. Avec un exemple basique ? |
@benjamindulau : L'idée serai de reprendre le fonctionnement de Gedmo pour les traductions. Une Facade pour communiquer avec l'application, qui prends en entrée des objets Connectable. Les objets Connectable sont des objets gérés par Doctrine, sinon on leve une exception. Afin de simplifier l'utilisation de la Facade (dixit ConnectionManager) par l'application, on peux utiliser un DTO\Connection qui contient les objets Entity ou Document dans les propriétés DTO\Connection::source & DTO\Connection::destination. A noter que pour réaliser les récupérations d'objets métiers. Comme nous avons les ObjectClass (FQDN des Entity / Document), il est simple de récupérer les EntityRepository/DocumentRepository et donc nos Entity / Document. Au niveau performance, On rappel que ce Bundle n'a pas la vocation de remplacer les graphes performants, mais a pour objectif de pouvoir apporter la notion de "Connection" entre objet à tout projet sans devoir approcher des solutions comme Neo4J |
Je reprend la conversation suite aux derniers commits. Le chargement des nodes via la config symfony est il toujours d'actualité ? La création de la connection passe actuellement par ConnectionManager::create() puis connect(). Quel est donc le scénario d'utilisation? Comment transmettons nous nos NodeInterface au manager ? |
Le manager sera disponible via le Container. Du coups, $manager = $this->getContainer()->get("kitano.connection.manager");
$manager->create($userA, $bookB); //Create a new connection. No need to call $manager->connect(), this is done internally.
$manager->getConnections($bookB); PS : J'ai conservé l'interface NodeInterface. Elle simplifie l'écriture des prototypes mais pourra être retirer par la suite si besoin. |
Oui effectivement, c'est la solution que j'avais en tete à la vue du modèle et des interfaces. Par contre au niveau du registre proposé par Benjamin, on fait quoi ? |
Quand tu parles de Registre, tu parles d'un système de cache ? |
Non je parlais du 2eme com de Benjamin sur cette issue. |
Ouverture d'une Issue concernant la gestion du cache : #18 |
Je reprend ici la discussion que nous avions avec @armetiz concernant le chargement des différentes connections d'un node.
Ceci pose un problème au niveau du mapping, car lors d'une demande des connections pour un Node auprès du ConnectionManager, la persistance ne sait pas quel type d'objet il doit "requêter".
The text was updated successfully, but these errors were encountered: