Chen Zhuo marqua une pause, puis ajouta : « La multiplication vecteur-matrice creuse a une complexité temporelle en O(N). Même si quelqu'un a dix mille connexions, un ordinateur peut effectuer ce genre de multiplication de tableaux unidimensionnels en moins d'une milliseconde. »
Dans le cybercafé, Chu Ge avait déjà mordu le bonbon jusqu'au bâton.
Le plastique dur heurta ses dents, et il revint brutalement à la réalité, jetant le bâton par terre.
Ses yeux restaient collés au couvercle de nouilles instantanées taché d'huile de piment rouge devant lui.
Deux lignes de formules un peu brouillonnes y étaient inscrites.
Le blocage de base de données empoisonnait la start-up de la Capitale depuis deux semaines pleines, un problème que plusieurs élèves brillants du département d'informatique de Shuimu avaient jugé un goulet d'étranglement matériel insoluble.
Pourtant, venant de ce gamin de douze ans, quelques concepts de base d'algèbre linéaire venaient de le pulvériser.
« J'ai compris. »
La voix de Chu Ge tremblait légèrement.
« Oublie les requêtes relationnelles. Sors toutes les tables de relations et maintiens une matrice creuse en mémoire. Fais tourner toutes les requêtes comme des multiplications vectorielles en mémoire. Une fois le résultat obtenu, tu n'as qu'à utiliser l'ID utilisateur pour récupérer l'avatar et le nom depuis la base de données. »
« C'est ça », répondit Chen Zhuo.
« Mais y a un problème. »
L'esprit de programmeur de Chu Ge détecta vite une faille.
« A connaît B, B connaît C, et C connaît A. C'est un cycle en théorie des graphes. Si les vecteurs ne cessent de se multiplier, ça va pas créer une boucle infinie et griller toute la puissance de calcul ? »
« Chu Ge. »
Chen Zhuo soupira de l'autre côté du fil, une pointe d'exaspération dans le ton.
« C'est un problème d'ingénieur, pas une démonstration mathématique. Dans les résultats de la multiplication vectorielle, pour toute valeur supérieure à 0, utilise juste une table de hachage pour enregistrer l'ID. La prochaine multiplication, si tu tombes sur un ID déjà enregistré, tu le sautes. »
Chen Zhuo secoua doucement la tête.
« T'es un codeur. Attends pas d'une formule mathématique qu'elle te calcule combien de carrés de papier toilette il faut pour t'essuyer le cul. Fais marcher un peu ton bon sens de programmeur, veux-tu ? »
Entendant le ton moqueur au téléphone, Chu Ge afficha soudain un large sourire.
« D'accord. Je te dois une fière chandelle. Cette fois, c'est moi qui invite. »
Chu Ge plia le couvercle de nouilles en deux et le glissa soigneusement dans sa poche.
« Quand je rentre à Keda après le Nouvel An, je t'offre un mois de sautés à la cantine. Je raccroche. Faut que j'aille écrire ce démon mémoire bas niveau. »
Une tonalité bourdonna dans le combiné avant même que Chen Zhuo n'ait pu répondre.
Chen Zhuo posa le téléphone, secoua la tête, un léger sourire aux lèvres.
Il se tourna et alla à la cuisine chercher un bol et des baguettes, prêt à dîner.
À plus de mille kilomètres de Zeyang, dans la Capitale.
Dans un immeuble vétuste près de Zhongguancun.
La pièce était sombre, éclairée seulement par la lueur blafarde de trois ou quatre écrans. Dehors, l'éclat occasionnel de feux d'artifice brillants illuminait un sol jonché de mégots et de restes de plats à emporter.
Wang Xing était emmitouflé dans une épaisse veste en coton, affalé sur sa chaise de bureau. Ses yeux étaient injectés de sang, rivés sur le journal backend à l'écran.
Ils voulaient construire un vrai site de réseautage social campus à noms réels dans ce Far West qu'était internet. L'idée était brillante. Wang Xing et ses associés avaient même réussi à décrocher un investissement d'amorçage de plusieurs centaines de milliers avec juste une présentation PowerPoint.
Mais un goulot d'étranglement technique les clouait sur place.
Demain était le troisième jour du Nouvel An lunaire, et leur investisseur exigeait une démo système capable de supporter cinq cents utilisateurs en ligne simultanément.
Wang Xing n'avait pas dormi depuis trois jours.
Dès que la concurrence montait, les requêtes de base de données pour la fonctionnalité centrale « ami d'un ami » faisaient s'effondrer tout le système comme une avalanche.
L'icône MSN dans le coin en bas à droite de l'écran se mit soudain à clignoter.
Les yeux injectés de Wang Xing tressaillirent. Il saisit la souris et cliqua pour ouvrir.
C'était Chu Ge, le hacker surdoué de Keda, tout là-bas à Huizhou, qu'il avait embarqué comme support technique gratos.
« Vieux Chu, économise tes forces. »
Wang Xing tapa une ligne et l'envoya, les doigts un peu raides.
« On a essayé d'ajouter un cache, essayé de construire un index. Rien ne marche. Une base relationnelle peut pas gérer ce genre de requêtes réseau multi-niveaux. Le matériel suit pas. »
Quelques secondes plus tard, Chu Ge envoya un fichier compressé.
Il faisait moins de 20 Ko.
Immédiatement après, un message de Chu Ge apparut.
« Supprime tout ton code de requêtes relationnelles précédent. Lance ce démon en C sur le backend du serveur. »
Wang Xing figea un instant.
« C'est quoi ça ? »
« Un outil de multiplication de matrice creuse au niveau mémoire. »
La réponse de Chu Ge était simple.
« Exporte juste ta table de relations en fichier texte brut et fourre-la dedans. À partir de maintenant, pour toutes les requêtes d'amis, passe pas par la base. Envoie juste une commande à ce processus. Il fera les calculs en mémoire et te renverra un tableau d'IDs d'amis. »
Wang Xing fixa le message, complètement décontenancé.
Mais il était au bout du rouleau. C'était un coup de poker, mais il n'avait rien à perdre.
Il accepta le fichier, le décompressa, et traîna le code source dans son compilateur pour un coup d'œil rapide.
Au moment où il le vit, une sueur froide lui parcourut le dos.
Le code était d'une concision extrême. Pas de fichiers de bibliothèque pour connexions base de données, seulement des opérations de pointeurs mémoire bas niveau et quelques multiplications en boucles de tableaux unidimensionnels qu'il comprenait pas tout à fait.
Pas une seule requête SQL à l'intérieur.
Wang Xing prit une grande inspiration. Il téléversa l'exécutable compilé sur le backend du serveur de test, puis l'alimenta avec des dizaines de milliers de lignes de données relationnelles de test.
Le processus démarra silencieusement, utilisant moins de cinquante mégaoctets de mémoire.
« Lance un test de charge. »
Wang Xing tourna la tête et hurla vers Wang Huiwen, affalé à côté de lui, à moitié endormi.
Wang Huiwen se frotta les yeux engourdis et tapa une commande de test de charge au clavier.
« Simulation de cinq cents requêtes concurrentes, requête d'amis à trois degrés de séparation. »