Autoblog de suumitsu.eu

Ce site n'est pas le site officiel de suumitsu.eu
C'est un blog automatisé qui réplique les articles de suumitsu.eu

[edit] Magnesia: une nouvelle branche de développement

Fri, 15 Jun 2012 10:17:38 +0000 - (source)

evoli

(un Evoli vectorisé par mes soins)

Après la publication des r4 et r5 de Magnetik sur le wiki, je me suis lancé dans un « fork » qui au final sera sans doute ma base de développement pour les versions futures: Magnesia.

Je vais essayer de ne pas vous saouler avec des machins de développeurs :)

L’objectif de Magnesia est le même: fournir un miroir léger de liens magnet. Pour chaque torrent, on a le détail du nom, du poids, du nombre de seeders, leechers et téléchargements, … et surtout le lien magnet.

Magnesia est quelque peu différent de ses prédécesseurs: le stockage des données ne se fait plus dans une base de données SQLite ou en fichiers CGI, mais tout simplement sous forme de fichiers PHP contenant des tableaux. Exemple:

$tid2623 = array(‘name’=>’%5bPhase%203%5d%20Hellsing%20ch85%20HQ’,'tname’=>’%5bPhase3%5d%5fHellsing%5fch85%5fHQ%2ezip’,'tsize’=>’4500878′,’btih’=>’2466fc6e0c2f2ddbcc1cb224821d8fc881375080′,’cat’=>’English-scanlated Books’,'add’=>’1214209440′,’sub’=>’Anonymous’);

Dans le cas présent, le tableau concerne le torrent 2623, dont le nom est « [Phase 3] Hellsing ch85 HQ » (encodage URL pour les caractères spéciaux), le poids 4500878 octets, le btih (BitTorrent Infohash, utilisé dans le lien magnet), la catégorie, la date d’ajout (format UNIX) et l’envoyeur. Chaque référence de torrent a son tableau.

Chaque fichier (« table de base de données ») peut contenir jusqu’à 1000 références: pour savoir quel fichier charger, PHP divise et tronque l’id du torrent demandé par l’internaute: ainsi, le torrent 2623 est référencé dans le fichier n°2. Par cette technique on peut limiter la quantité d’informations chargées en mémoire, et ainsi permettre à PHP de trouver très rapidement la bonne référence et afficher les informations à l’internaute.

Avec LiVID r1 (et r2) le stockage des données était encore plus performant mais était organisé ainsi: 1 fichier par référence, fichier qui contient des variables. C’est sensiblement moins pratique, et surtout c’est pas l’idéal pour faire un miroir d’un gros site: dans le cas de NyaaTorrents, il aurait fallu mettre plus de 300 000 fichiers de 0.5 ko dans un dossier. Avec Magnesia, ce nombre est ramené à « seulement » 300 fichiers (qui du coup sont plus lourds, c’est vrai, mais à ~300 ko le fichier c’est tout à fait supportable).

Avec Magnesia je veux limiter la charge PHP, car selon les graphiques du vCPU quand Magnetik r5 a commencé à accueillir des crawlers de moteurs de recherche, ça a commencé à chauffer :) En particulier pour l’affichage de listes et la recherche. Faut dire qu’en la matière fSQL ne peut pas concurrencer un vrai SGBD comme MySQL ou PostGreSQL. Donc pour Magnesia, j’ai décidé que ce n’est pas la peine de se casser la tête sur une fonction de recherche: les moteurs de recherches s’occupent très bien de cela, il faut donc juste leur « tracer le chemin » pour qu’ils puissent tout indexer: le listing affiche toutes les références d’une table (soit jusqu’à 1000 torrents), et il est possible de naviguer d’une table à l’autre (j’ai mis en plus des liens « first » et « last » pour permettre d’aller rapidement à la table 0 ou la table la plus récente). Et histoire d’aider l’internaute, les pages comportent un champ de recherche Google: il retourne les résultats de ce site uniquement.

Mais comment la base de données est crée, c’est le serveur qui s’en charge comme pour les éditions précédentes ? Et bien non: les fichiers PHP avec les tableaux sont crées par l’administrateur, grâce à des scripts bash-PHP (pourquoi bash-PHP ? Parce que je n’ai pas trouvé plus efficace pour récupérer des informations de .torrent que le script PHP torrent-rw, et que par conséquent le script bash « sous-traite » certaines fonctions à PHP pour avoir l’info). L’idée donc c’est que l’administrateur crée, étend et met à jour les fichiers PHP sur son pc, les mets dans un fichier ZIP, envoie ce dernier sur son site, et exécute le script de dézippage. Pas obligé de zipper, mais ça se compresse vachement bien alors pourquoi pas :)

Je vais sans doute intégrer une fonction de sauvegarde aussi, qui propose au téléchargement toute la base de données à l’internaute (pour lui permettre de monter rapidement son propre miroir Magnesia par exemple). La structure des pages de détail de torrent est volontairement simple pour faciliter le traitement automatique (awk).

En tout cas j’ai été agréablement surpris de la vitesse d’exécution de PHP (en même temps c’est juste des tableaux à traiter) donc je suis déjà en train de considérer une adaptation pour The Pirate Bay :) Ou n’importe quel site de références de torrent qui serait un peu trop visible pour rester inattaqué.

Au niveau fonctionnement interne je pense être parvenu à faire ce que je voulais faire, normalement les scripts bash prévoient tous les cas de figure (échappement de caractères, encodage URL,..) donc si ça tourne bien je publie Magnesia r1, les scripts et une base de données prête à l’utilisation en prime ;)

C’est simple, c’est léger, c’est rapide, c’est compatible au maximum (testé sur un pagesperso Free, ça ne peut que marcher ailleurs xD ), c’est valide HTML 5 – CSS 3, c’est libre, ça m’a appris pleins de nouveaux trucs et ça peut se révéler très utile :)

EDIT 19 juin: code de Magnesia r1 publié sur le wiki ainsi qu’une base de données « prête à l’emploi » allant jusqu’au nyaaid 324207. Il me reste encore le script pour mettre à jour les stats, et puis je publie les feeders :)

flattr this!


Powered by VroumVroumBlog 0.1.31 - RSS Feed
Download config articles