tsort: Effectue un tri topologique sur les données d'entrée
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-tsort
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-tsort
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-tsort v1.0 publié le 06 avril 2016.
Effectue un tri topologique sur les données d'entrée.
Synopsis
local dump = require "pl.pretty".dump
local tsort = require "resty.tsort"
local graph = tsort.new()
graph:add('a', 'b')
graph:add('b', 'c')
graph:add('0', 'a')
dump(graph:sort())
-- Sortie :
-- {
-- "0",
-- "a",
-- "b",
-- "c"
-- }
graph:add('1', '2', '3', 'a');
dump(graph:sort())
-- Sortie :
-- {
-- "0",
-- "1",
-- "2",
-- "3",
-- "a",
-- "b",
-- "c"
-- }
graph:add{'1', '1.5'};
graph:add{'1.5', 'a'};
dump(graph:sort())
-- Sortie :
-- {
-- "0",
-- "1",
-- "2",
-- "3",
-- "1.5",
-- "a",
-- "b",
-- "c"
-- }
graph:add('first', 'second');
graph:add('second', 'third', 'first');
local sorted, err = graph:sort()
-- Retourne :
-- sorted = nil
-- err = "Il y a une dépendance circulaire dans le graphe. Il n'est pas possible de dériver un tri topologique."
Alternatives
Avant de développer cette bibliothèque, j'ai demandé sur le canal #lua sur Freenode si quelqu'un connaissait une bibliothèque qui effectue un tri topologique. J'ai également essayé de rechercher une bibliothèque. Malheureusement, je n'ai rien trouvé. Mais, il y avait déjà une bibliothèque de l'excellent @starius appelée toposort. toposort a l'air vraiment bien et il a beaucoup plus de fonctionnalités par rapport à lua-resty-tsort. Vous voudrez peut-être également y jeter un œil, surtout si vous recherchez une bibliothèque plus complète. Je n'ai pas évalué ces bibliothèques ni les ai comparées à l'implémentation C de tsort ou à d'autres alternatives. Si votre graphe n'est pas trop grand, disons que vous les utilisez pour trier des fichiers Javascript / CSS ou quelque chose de similaire, je pense que la performance n'est pas un problème.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-tsort.