Présentation du projet
- NewCodes est un service de curation de blogs techniques d’entreprise
- Architecture Spring Boot + PostgreSQL
- Mise en œuvre d’une fonctionnalité d’autocomplétion : recommandations basées sur les Term, recherche avec décomposition des jamo, recherche par consonnes initiales, recommandation de pages d’entreprise
Découverte du problème de performance
- 110 000 données accumulées dans la table Term
- Le temps de réponse de l’API a dépassé 1000 ms
- Objectif : répondre en moins de 100 ms
1re tentative : ajout d’index (1000 ms → 700 ms)
- Création d’index optimisés pour les recherches par préfixe avec LIKE en utilisant
varchar_pattern_ops - Création des index avec l’option
CONCURRENTLY, sans interruption de service - Application d’un index sur chacune des colonnes term, decomposed_term et chosung
2e tentative : index sur la fonction LOWER (700 ms → 110 ms)
- Identification d’un problème de scan complet provoqué par l’utilisation de la fonction
LOWER() - Création d’un index fonctionnel (Functional Index)
- Refonte des index sous la forme
LOWER(nom_de_colonne) varchar_pattern_ops
3e tentative : JOIN → EXISTS (110 ms → 100 ms)
- Le INNER JOIN entre Corporation et Article était le principal goulot d’étranglement
- Remplacement par une sous-requête EXISTS pour réduire la zone de scan
- Optimisation pour ne vérifier que la « présence de données »
4e tentative : dénormalisation & index de couverture (100 ms → 90 ms)
- Ajout de la colonne
total_frequencypour supprimer les opérations d’agrégation - Remplacement des opérations GROUP BY et SUM par des valeurs pré-calculées
- Réduction des opérations d’I/O grâce à un index de couverture
- Inclusion de term et total_frequency dans l’index avec la clause
INCLUDE
5e tentative : JDBC Template (90 ms → 80 ms)
- Suppression de la surcharge de JPA/Hibernate
- Exécution directe des requêtes avec JDBC Template
- Pour les lectures simples, ignorer la couche ORM s’est révélé efficace
Résolution du problème de Rate Limiting Nginx
- Configuration initiale : limite de 2 requêtes par seconde, burst 10
- Des échecs de requêtes sont apparus à cause d’un debouncing à 100 ms
- Amélioration : passage à 10 requêtes par seconde, burst 20
- Changement du code de statut de 444 à 429
Réduction de la taille des données de réponse
- Suppression des noms de champs JSON et passage à une réponse basée sur des tableaux
- Distinction des types par des numéros (0: Corporation, 1: Theme, 2: Term)
- Réduction du temps de transfert réseau
Traitement parallèle avec CompletableFuture
- Exécution simultanée et indépendante des requêtes Corporation, Theme et Term
- Le temps total ne correspond plus qu’au temps de réponse maximal, au lieu d’une exécution séquentielle
- Ajout d’ExecutorService et de la gestion des exceptions
Résultat final
- 1000 ms au départ → 80 ms au final (serveur de développement), 40 ms (serveur de production)
- Amélioration des performances de plus de 90 %
Principaux enseignements
- Importance de bien définir le problème et la direction à prendre
- Trouver le bon équilibre entre utilisation de l’IA et validation par le développeur
- Nécessité d’une conception à l’échelle de toute l’architecture
- Choix du type d’index : index simple / composite / de couverture
- Attention à l’invalidation des index lors de l’utilisation de fonctions
- Compréhension du fonctionnement interne de JPA
- Analyse des plans d’exécution des requêtes avec EXPLAIN
Pistes d’amélioration futures
- Utilisation d’une structure de données Trie
- Mise en cache des termes les plus recherchés
- Utilisation d’un CDN (dans le cas d’un service mondial)
27 commentaires
Je suis l’administrateur.
Nous vous informons que la discussion dans les commentaires semble s’échauffer, en mêlant de manière complexe des éléments sans lien avec le contenu technique de la publication.
Les discussions techniques et les retours sont toujours les bienvenus.
Les avis peuvent être variés, mais lors de la rédaction des commentaires, nous vous demandons de respecter les règles élémentaires de courtoisie envers les autres et de privilégier une discussion centrée sur la logique, ainsi que sur le contenu de la publication elle-même plutôt que sur les personnes ou leur parcours.
Merci de relire une nouvelle fois le guide de rédaction des commentaires dans les règles d’utilisation du site.
À titre d’information, concernant les publications signalées, des enregistrements et des mesures au niveau du système ont déjà été effectués, et nous continuerons à améliorer en permanence les politiques de modération et le système associé.
Par ailleurs, si vous avez des avis ou des retours sur la modération, n’hésitez pas à nous contacter par e-mail.
Oui, d’accord.
Je trouve l’ambiance des commentaires un peu étrange. Est-ce que le titre ou le contenu a changé par rapport à la première publication ? Je ne trouve pas si étrange que ce genre d’article soit publié.
Il y a aussi des avis du type « On n’écrirait pas ce genre d’article sur le blog technique d’une entreprise. », mais définir un objectif de performance et répéter les améliorations pour l’atteindre est un sujet qui revient souvent sur les blogs techniques d’entreprise.
Par exemple, parmi ceux que j’ai lus auparavant, il y a un article comme celui-ci.
Je suis d’accord avec ce que vous dites.
Mais je pense que la situation actuelle relève d’une critique de l’attitude de l’utilisateur qui a abusé du système. Juger du niveau du post me semble hors sujet.
Les réactions défavorables viennent sans doute du passif d’abus de l’auteur. À mon avis, commenter le contenu en lui-même est une remarque superflue.
C’est précisément ce point qui me laisse perplexe.
Si tout le monde avait plutôt réagi en disant « Cette personne abuse du système ! », je n’aurais sans doute pas posté un commentaire comme celui-ci. Mais comme la plupart des commentaires portaient sur la qualité du billet initial, c’est cela qui me paraît étrange. Si le vrai problème était vraiment l’abus du système, alors évoquer la qualité du texte ne serait-il pas un ajout totalement superflu ?
Je suis d'accord.
Même, quand on voit le « J’ai commencé à le développer tout seul à l’armée à partir de mai 2025 ! », on voit bien que ce n’est même pas un blog d’entreprise...
Bien sûr, il est difficile de nier que le contenu partagé relève de « travaux qu’il faut évidemment faire »,
et c’est aussi vrai qu’il s’agit de « quelque chose sans élément différenciant, au niveau d’un simple exercice personnel », mais
GeekNews était-il un espace où il y avait une ambiance disant qu’on ne devait pas partager ce genre de choses ?
N’a-t-on pas le droit de partager l’expérience d’avoir réalisé des tâches qu’il faut évidemment faire ?
N’a-t-on pas le droit de partager une expérience sans élément différenciant ?
N’a-t-on pas le droit de partager une expérience au niveau d’un simple exercice ?
C’est peut-être l’impression que cela a pu vous donner. Si j’ai laissé le commentaire ci-dessous, c’était pour deux raisons. Premièrement, le premier billet publié sur Show GN avait été signalé comme abusif. Un jour plus tard, l’auteur a résumé son propre article sur velog et a publié un nouveau billet, mais la question est de savoir si le contenu lui-même méritait réellement d’être publié ici. Si l’on se demande si l’on y voyait les réflexions et les efforts personnels de l’auteur, je rejoins l’avis d’autres personnes : la recherche est un domaine pour lequel les techniques sont déjà assez largement connues, et j’ai laissé ce commentaire parce que, plus que les aspects techniques, le contenu du blog m’a semblé contourner le sujet et s’inscrire dans le prolongement de la promotion de son propre service.
Il semble que le plus gros problème soit qu’il se soit attiré de l’antipathie à cause du signalement pour abus.
Le contenu du billet de blog en lui-même relève aussi de la promotion de son propre service, mais c’est également le cas des blogs techniques d’autres entreprises ; je pense donc que le rejeter uniquement pour cette raison est un critère assez sensible.
Et concernant la question de savoir si l’on voyait les réflexions et les efforts de l’auteur dans cet article, le fait que son hypothèse selon laquelle l’ajout d’index améliorerait les performances ait été infirmée, puis qu’il ait examiné le plan d’exécution et, en tenant compte de la logique métier, amélioré progressivement les choses en modifiant les requêtes ou le schéma jusqu’à atteindre les performances visées, me semble relever tout à fait d’une réflexion et d’un effort suffisants.
Je suis allé lire le billet de blog et l’article original aussi. J’ai l’impression qu’il y a un certain décalage entre le titre et le contenu réel. Les fonctionnalités que vous avez implémentées ainsi que la direction des améliorations apportées correspondent déjà à des éléments mis en œuvre et intégrés dans plusieurs projets open source existants. Ce que vous avez fait ici, c’est plutôt faire évoluer la recherche qui avait été d’abord implémentée de manière simple dans votre propre service, mais à lire le titre, on a l’impression qu’il s’agit d’une refonte majeure de l’algorithme… Votre précédent article avait déjà été signalé comme promotionnel, donc je pense qu’il faudrait peut-être réfléchir un peu plus à la manière de rédiger ce type de publication.
Si vous l’avez ressenti ainsi, j’en suis désolé. Je pense que chacun a des attentes différentes en voyant le titre. Cela dit, il est juste de veiller à rédiger un titre aussi clair que possible, afin qu’il corresponde à des attentes similaires. J’y ferai attention.
Par ailleurs, j’aimerais que vous considériez cela séparément de mon précédent article. Mon précédent article a été signalé parce que j’ai tenté d’obtenir des upvotes en utilisant deux comptes inutilisés. C’est clairement mon erreur, et je tiens à préciser que le problème ne venait pas de l’article lui-même.
Je me demande si vous avez envisagé d’utiliser un index GIN au lieu d’un index sur
lower(). Puisque vous utilisez déjà du SQL brut avecJdbcTemplate, pourquoi ne pas en profiter pour envisager aussi le FTS ?La méthode asynchrone avec
CompletableFuture.supplyAsync()utilise elle aussi lecommonPooldeForkJoinPoolsi aucunExecutorServiceséparé n’est spécifié.Si le nombre de connexions simultanées devient suffisamment élevé pour saturer ce
commonPoolutilisé à la place des threads de requête (jusqu’ànombre de cœurs CPU - 1), il se peut que cela ne tienne pas la charge.Sur ce point, passer à une approche reactive ou mettre à niveau la version de la JVM pour introduire les threads virtuels permettrait probablement de résoudre cela plus proprement.
Bonjour ! Tout d’abord, merci beaucoup d’avoir pris le temps de laisser un commentaire avec vos retours.
Nous avons estimé qu’un index GIN n’était pas nécessaire dans ce cas précis. Actuellement, l’API de recommandation d’autocomplétion des termes de recherche n’a besoin que du
termlui-même. Il n’est pas nécessaire de savoir à quels articles cetermappartient.En revanche, pour l’API de recherche, nous utilisons un index similaire à un index GIN. Nous exploitons paradeDB, une extension de Postgres, pour utiliser un index BM25.
Ce n’est pas expliqué en détail dans le billet, mais actuellement nous utilisons aussi un
ExecutorServicedéfini séparément. Cela dit, comme vous l’avez suggéré, nous envisagerons également plus tard une approche réactive ou des threads virtuels !!J’ai bien lu l’article. Au début, je me suis dit que ce serait peut-être simplement un billet expliquant qu’un index avait été ajouté, mais j’ai apprécié que vous ne vous soyez pas arrêté là, que vous ayez essayé différentes méthodes et que vous les ayez partagées. Par la suite, comme vous l’avez mentionné, ce serait bien d’essayer un trie, ou encore d’améliorer le système en donnant un peu plus de poids aux termes tendance qui ont été beaucoup recherchés récemment, par exemple !
Une chose m’intrigue : vous dites interroger à la fois
termetdecomposed termavec une conditionOR, mais commedecomposed termsemble être un sur-ensemble fonctionnel, je me demande s’il ne suffirait pas d’interroger uniquement ce champ. Même si la requête est « neng », elle sera décomposée en « n-e-o-ng », donc je pensais qu’elle permettrait tout de même de trouver « Naver ». Et j’imagine que ce serait pareil pour retrouver les cas où letermréel est « neng ».Comme vous l’avez indiqué, il suffit de faire la recherche uniquement avec le terme décomposé. À partir du moment où cela existe,
termétait une condition inutile, mais je pense que je n’en avais pas tenu compte. Je l’ai corrigé grâce à vous. Merci !Je tiens à m’excuser au sujet de cet article et du précédent.
Le fait d’avoir utilisé deux comptes que je n’utilisais pas pour mettre des upvotes était une erreur de ma part, et un acte stupide.
J’ai eu un comportement inapproprié parce que je voulais que ce projet, dans lequel j’avais investi beaucoup de temps, soit davantage remarqué.
Mais même avec cette raison, il est vrai que cela ne peut pas justifier une violation des règles.
À cause des upvotes que j’ai accordés à la légère, le classement de l’article de quelqu’un a sans doute dû baisser, et j’ai probablement perturbé l’ordre du site.
De plus, le fait d’avoir publié un autre nouvel article dès le lendemain du signalement pouvait tout à fait prêter à confusion.
Pour être honnête, comme il n’y avait pas de restriction d’usage du site en particulier, je me suis demandé si je pouvais publier immédiatement. C’était un manque de jugement de ma part.
Maintenant que j’y repense, j’aurais dû me retenir, indépendamment de l’existence ou non d’une sanction.
En me mettant dans la situation inverse, moi non plus, je n’aurais pas vu cela d’un bon œil si quelqu’un avait eu exactement le même comportement dans un espace que j’apprécie.
Depuis que j’ai commencé le développement, j’ai toujours pensé de manière inconditionnelle que le « partage » était une bonne chose, et j’ai agi en ce sens.
Mais cette fois m’a fait comprendre qu’il existe des espaces appropriés pour partager, et des moments appropriés pour le faire.
J’ai également compris que si j’arrive nouvellement dans un espace auquel d’autres tiennent et portent de l’intérêt, je dois d’abord faire preuve d’un maximum de respect envers eux.
C’est pourquoi j’aurais dû commencer par lire les règles d’utilisation, observer l’ambiance du site, et éviter tout comportement qui s’en écarte.
Je reconnais mes torts, et je présente ainsi, autant que possible, mes explications.
À l’avenir, je ferai en sorte d’utiliser le site avec plus de maturité.
:+1:
J’ai un peu l’impression que ce n’est pas vraiment le genre de contenu que les gens venus sur GeekNews ont envie de voir, non ?
Je ne comprends vraiment pas ce qu’il y a de si grandiloquent là-dedans.
On ne parle pas d’un volume de 1 million ou 10 millions d’enregistrements, le titre indique dès le départ qu’il s’agit d’un peu plus de 100 000 entrées ; dans ce contexte, n’est-il pas un peu étrange d’attendre de grandes optimisations plutôt que de s’en tenir aux fondamentaux ? Je me demande franchement à quel genre de chose grandiose on s’attendait.
Je ne vois pas bien pourquoi un article qui montre, dans une base de données pas encore correctement optimisée, une démarche consistant à ajuster les éléments un par un en restant fidèle aux bases devrait être considéré comme du pur appât à clics. À mon avis, une ambiance exclusive du genre « si ce n’est pas quelque chose de meilleur absolu, cela n’a même pas sa place ici » est néfaste.
On ne voit que ce que l’on connaît.
Pour faciliter la compréhension, je pense en ce moment à l’exemple de la création d’un forum.
Créer un forum faisait partie des premiers portfolios souvent recommandés aux développeurs débutants.
À première vue, cela semble simple.
On publie un message, il apparaît dans la liste, et c’est fini. Si on le fait vraiment de façon minimale, on pourrait même ne pas avoir besoin d’une base de données côté back-end.
Mais on ne voit que ce que l’on connaît.
Si l’on crée un forum sérieusement, il faut penser à la base de données, aux commentaires, à la connexion, puis à des évolutions comme l’authentification OAuth ou les JWT, et même pour une simple fonction de rédaction, aux pièces jointes image et vidéo, au support de la mise en forme, ainsi qu’à la sécurité à commencer par les XSS.
Même avec le même texte, l’image mentale que s’en fait le lecteur peut énormément varier selon ses connaissances préalables.
Je comprends bien quel type d’autocomplétion kunggom a imaginé en voyant le titre.
Mais chaque lecteur a vécu une vie différente, et au final les fonctionnalités imaginées par les lecteurs seront très différentes les unes des autres.
Je comprends aussi avec quelle intention vous avez écrit ce commentaire.
Moi aussi, je suis d’accord avec cet avis, mais je pense que vous savez qu’il correspond assez mal à la situation de la personne qui a écrit l’article ici.
Pourriez-vous expliquer un peu plus le passage disant que c’est « un propos qui ne correspond pas vraiment à la situation de l’auteur du billet » ?
D’après le texte original, il est explicitement indiqué que ce projet est « un projet personnel, et non un service avec énormément de trafic ou qui doit générer des revenus ». On peut donc supposer que, s’il y a une optimisation ambitieuse, elle relève simplement d’une curiosité personnelle, et non d’une raison pratique. Dans ce cas, je ne trouve pas étrange qu’un tel niveau d’effort technique n’ait pas été investi, et c’est justement pourquoi je ne comprends pas pourquoi les réactions de certaines personnes sont particulièrement négatives. D’autant plus que les chiffres cités dans le titre ne sont pas non plus en contradiction avec le contenu de l’article.
Je ne pense pas que kunggom soit un développeur manquant à ce point de connaissances de base qu’il ne puisse même pas comprendre l’analogie du forum dont j’ai parlé.
Je pense que notre désaccord actuel vient d’abord de notre perception des utilisateurs qui abusent du système, donc je vais le dire une dernière fois.
Ce que j’attendais, c’était une recherche sémantique.
La recherche sémantique n’est pas du tout un sujet irréaliste à l’heure de l’engouement pour l’IA, et je pense que vous savez qu’elle est tout à fait réalisable même par un particulier.
À la base, quand nous cliquons sur un titre, nous ne le faisons pas en comprenant le contexte de la personne qui a écrit le post, mais je veux dire que, même si ce n’est pas un service avec énormément de trafic ou qui doit générer des revenus, cela reste tout à fait faisable.
Et je parle uniquement du titre en ce moment.
Je parle de l’image que j’avais imaginée en voyant le titre, et cette partie n’est pas nécessaire dans notre conversation actuelle.
Comme je l’ai dit hier, si cette personne n’avait pas été flaguée, j’aurais été d’accord avec ça moi aussi, mais à partir du moment où elle a manipulé les recommandations de son propre post, cette discussion n’a plus de sens.
C’est ce que vous avez dit plus haut.
Si quelqu’un a la liberté d’écrire même après avoir été flagué, il y a aussi la liberté de le critiquer pour cela.
Comme vous l’avez vous-même dit, si vous pensez qu’il est problématique de s’adresser un peu plus sévèrement dans les commentaires à quelqu’un qui a été flagué, au lieu de le signaler dans les commentaires, je vous invite à en faire la suggestion à l’équipe de modération.
Vous voulez donc dire que vous pensiez à un partage d’expérience d’optimisation pour ce type de service qui, par exemple en ajoutant des embeddings, recommanderait intelligemment des candidats de recherche même si l’utilisateur saisit quelque chose de très approximatif.
Si c’était cela, j’ai plutôt l’impression que c’est le genre d’attente qu’un titre comme « recommandation de requêtes de recherche » devrait susciter, mais je comprends ce que vous aviez en tête.
Je comprends une position critique à l’égard de l’abus, mais la dernière phrase me déçoit un peu, car elle donne l’impression de déplacer subrepticement le propos, d’un manque de maîtrise technique vers une question de non-respect des règles de la communauté, comme une tentative maladroite de « je vais te réfuter avec ta propre logique et tes propres arguments ».
Vous auriez plutôt gagné en force de persuasion si vous aviez critiqué uniquement l’abus dès le départ. Si cela avait réellement été le cas, même si le billet avait effectivement contenu ce que vous dites avoir attendu au départ — par exemple une optimisation des vector embeddings sur un DBMS récent — ou même s’il avait utilisé un « titre plus modeste », une réaction hostile à l’historique récent d’abus de son auteur serait de toute façon apparue, et sur ce point je n’ai absolument aucune objection. Cela n’a, après tout, pas grand-chose à voir avec le contenu technique.
Ce à quoi je m’oppose, c’est à la raison pour laquelle cela s’exprime sous la forme d’un reproche de « manque de maîtrise technique ». Si l’abus est un comportement inacceptable, alors il mérite évidemment d’être critiqué indépendamment du contenu. Dans ce cas, y a-t-il vraiment une raison d’y mêler une critique du contenu ? Pourtant, les commentaires publiés ici ont presque tous une tonalité suggérant que le contenu serait techniquement immature. Vous-même, crawler, avez utilisé envers moi une analogie du type « créer un forum par un développeur débutant » en disant que « on ne voit que ce que l’on connaît ». Dans ce cas, ne faut-il pas se demander si la question de l’abus n’est pas au contraire secondaire, ajoutée après coup ?
Si l’on suit le contenu de votre commentaire, alors même si le billet d’origine avait réellement été du type de contenu que vous attendiez, vous l’auriez quand même critiqué pour l’abus en lui-même. Ou bien, faut-il comprendre que, même en cas d’abus, si vous appréciez personnellement le contenu du billet, vous n’éprouvez plus le besoin d’exercer votre liberté de parler « avec sévérité » ?
C’est pourquoi je vous repose la question. Si vous critiquez vraiment l’auteur du billet original à cause de son abus, pourquoi avoir rédigé un commentaire centré principalement sur une critique du contenu plutôt que sur l’abus lui-même ?
Auriez-vous des éléments à l’appui de l’affirmation selon laquelle j’aurais « entravé la liberté d’expression des autres » ? J’ai du mal à comprendre ce point. Je n’ai pas de pouvoir de modération sur cet espace qui me permettrait d’empêcher d’autres personnes d’écrire des posts ou des commentaires. D’ailleurs, vous avez bien réussi à écrire un commentaire aussi long, n’est-ce pas.
Si le simple fait de poster un commentaire en désaccord avec l’opinion d’autrui revient à empêcher la liberté d’expression de l’autre, alors il faudrait considérer que crawler est, en ce moment même, en train de porter atteinte à ma propre liberté d’expression. Sinon, n’est-ce pas logiquement du deux poids, deux mesures ?
Et comme vous l’avez vous-même reconnu, au final, la question de savoir s’il y a eu abus n’avait absolument aucune importance dans les critères de jugement.
N’est-ce pas contradictoire avec le propos suivant : « Comme je l’ai dit hier, si cela n’avait pas été flaggé, j’aurais moi aussi été d’accord avec cela, mais à partir du moment où il y a eu manipulation des recommandations sur le post publié, cette discussion devient dénuée de sens. » ?
J’ai l’impression que le point de discussion et l’argument avancé changent sans cesse ; j’aimerais que vous vous en teniez à une seule ligne.
Je pense que le fait de blâmer collectivement — ou de donner cette impression — des articles qui sont pourtant suffisamment liés au sujet de la communauté et qui ne sont pas de la bouillie IA, en disant « cet article est trop médiocre pour être à la hauteur de notre communauté », est peut-être encore plus nuisible à la croissance et au maintien de la communauté que la manipulation des votes. Cela peut donner à l’extérieur l’image d’une communauté exclusive, ce qui risque de fortement freiner l’arrivée de nouveaux utilisateurs potentiels.
Bien sûr, cela ne veut pas dire qu’il ne faut pas critiquer. Mais je trouve qu’au minimum cette ambiance est un peu étrange. En dehors d’une déception commune liée au fait que ce n’était pas le contenu qu’ils attendaient, il n’y a eu que peu d’analyses et de retours qui paraissaient constructifs.
Et si vous pensez vraiment que le problème est qu’une personne prise en flagrant délit d’abus puisse republier dès le lendemain, pourquoi ne pas profiter de cette occasion pour proposer officiellement à l’équipe de modération d’ajouter une règle à ce sujet ? Il me semble qu’il existe déjà un certain niveau de sanction, mais vous semblez penser que ce n’est pas suffisant.
À voir vos publications promotionnelles fréquentes dans les galeries d’autres sites, comme à l’époque de Yukryong-ui Sidae ou Web Samguk Musou Jeon, on dirait que vous faisiez souvent votre propre promo vous aussi.
Quand je vois que vous présentez vos travaux inachevés comme de simples appâts pour tester la réaction, puis que vous abandonnez facilement ces projets ensuite, je me demande franchement en quoi cela diffère vraiment de ce billet… alors pourquoi appliquer des critères aussi stricts aux autres ?
Est-ce que c’est parce que DC est un endroit où traînent des gamins, donc on peut y faire n’importe quoi, alors que GeekNews est un lieu auquel vous tenez, donc vous ne supportez pas que quelqu’un d’autre le salisse ?
Je ne cherche pas spécialement à argumenter de façon logique, je dis juste ça parce que votre deux poids deux mesures me paraît assez inédit, donc tout ce que vous répondrez aura sûrement raison. Bon courage pour l’abus.
Au contraire, moi je ne comprends pas bien. Vous considérez vraiment que ce message a été publié dans le but de critiquer de manière collective et organisée ? J’ai plutôt l’impression que c’est votre argumentation qui présente de façon négative les opinions que chacun peut exprimer individuellement, non ? À l’avenir, j’espère que vous accueillerez avec la même bienveillance des billets du niveau d’un journal de développement (j’ai fixé un objectif pour améliorer l’affichage d’une étoile avec
printf, j’ai fait des améliorations et j’ai donc utilisé une bouclefor!) si jamais ils sont publiés.Sous un titre comme « API d’autocomplétion de recherche optimisée », le contenu n’est finalement qu’une simple optimisation des recherches en base de données.
S’il s’agit d’un usage commercial, une optimisation Oracle suffit largement, et il existe déjà de nombreux services d’autocomplétion. Il n’y a même pas de discussion sur un quelconque élément différenciateur, et le contenu relève du niveau d’un simple exercice personnel.
C’est assez pénible à lire.