-
Notifications
You must be signed in to change notification settings - Fork 7
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
[WIP] Améliorer les Internals du Manager #20
Comments
Je suis en train d'implémenter le ConnectionBundle avec Mongo dans un projet actuellement. De façon à me projeter sur des éléments solides, j'ai codé le cas d'utilisation qui me semblait le plus lourd : en entrée d'une API, 2 méthodes LINK & UNLINK (basés sur les verbes HTTP) qui permettent de lier n'importe quel resource existante à un utilisateur par ex (LINK /api/users/{userID}) Voici le code : Je veux bien concevoir que ce cas est lourd et qu'on aura pas forcément le besoin de réaliser plusieurs actions à la suite et en boucle, mais dans l'idée c'est pour mettre en évidence deux choses :
Bref, ce que je me dis, c'est que si on cherche la performance et qu'on ne veut pas etre obligé de bypass le manager pour faire des reqs customs, il faudrait mettre en place dans le manager et par extension dans les repos un systeme de jointure qui évite de faire ce genre de trucs : Donc deux choses :
Vos avis ? |
Pour la deuxième partie de ton message, Concernant l'ajout de Connection en "masse", c'est en effet un gros soucis de performance en l'état. Que penses-tu d'un système de "connection" optimisé pour la masse ? $connectionDesc = array();
foreach($request->attributes->get('link') as $type => $objects)
{
foreach($objects as $object)
{
$connectionDesc[] = array($user, $object, $type);
}
}
$cm->connect($connectionDesc); De cette maniere, on abstrait toujours la partie Persistance à l'utilisateur. Le soucis, c'est que l'on change le prototype de la méthode connect.. On ajoute : En interne, ConnectionManager::connect & disconnect s'occupe de construire un connectionDesc et d'utiliser connectBulk / disconnectBulk. |
👍 pour les deux dans l'idée. Par contre attention du coup à l'ordre des parametres dans l'array, là ton exemple implique que le premier = source & deuxieme = destination. C'est completement logique mais pas très explicite. On pourrait peut etre aller vers un objet ? Dans l'absolu les deux me vont, c'est juste pour faire 'propre'. |
Connaissant @benjamindulau il va vouloir faire de la POO jusqu'au bout :p Un truc du genre ? |
Déjà 👍 pour les *Bulk() ! Ensuite, n'oubliez pas (c'est ce que dit @armetiz), que le repository est là pour justement se permettre de faire quelque chose de sale mais performant. Ce n'est pas du tout aberrant que le manager se repose simplement sur le repository pour le Après côté Repo on fait ce qu'on veut, si on doit faire du raw sql pour les perfs, go ! 👍 pour un objet qui contient un bulk des connections à effectuer, on pourrai tl'appeler |
Je pense avoir pas mal avancé sur le sujet, le seul truc pas encore tip top c'est la déconnection en masse qui reste assez consomateur en requettes, à voir si vous pouvez optimiser :) https://github.com/Kitano/KitanoConnectionBundle/blob/master/Manager/ConnectionManager.php#L98 |
Actuellement les fonctions internes du Manager ne sont pas forcement optimiser pour les performances..
Prenons l'exemple de Manager::areConnected qui est assez lourde pour pas grand chose.
Peut-être que cela doit aboutir à une modification de RepositoryInterface
The text was updated successfully, but these errors were encountered: