MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment Trello gère-t-il le réarrangement des cartes, des listes, des listes de contrôle, etc.

Chaque élément reçoit un pos (un nombre JavaScript, donc flottant double précision). Ensuite, ils sont rendus en triant par pos .

Lorsqu'un nouvel élément est ajouté, il est pos est basé sur l'endroit où il se trouve dans la liste :

  • bas de la liste - maximum pos actuellement dans la liste + un tampon (je pense 1024 est utilisé)
  • haut de la liste - minimum pos actuellement dans la liste divisée par deux
  • milieu de la liste - moyenne de pos des deux éléments adjacents

L'option du milieu serait attribuée par le client ; le haut/bas peut être assigné par le client ou transmis au serveur sous forme de chaînes "top" ou "bottom" auquel cas le serveur exécutera la logique.

Sur le serveur, après avoir assigné le pos au nouvel élément comme indiqué ci-dessus, l'élément est vérifié par rapport à ses voisins les plus proches pour la contiguïté - s'ils sont à moins d'une distance minimale l'un de l'autre (.01 est utilisé, je crois), ils sont étalés (potentiellement en cascade pour augmenter le pos de toute la liste).

Je ne pense pas que ce soit la méthode idéale, mais c'est ainsi que Trello procède.