Ich habe an ISUCON10 teilgenommen! Es war eine sehr bedeutsame Erfahrung, weil ich zum ersten Mal an einem solchen Wettbewerb teilgenommen habe (Wettbewerbsprogrammierung)! In diesem Artikel möchte ich meine eigenen Erfahrungen und das, worum es bei ISUCON geht, vorstellen.
Wettbewerb um schnell zu beschleunigen (** I ** ikanjini ** S ** pinkelte ** U ** p ** CON ** Test) Abkürzung für **, es ist ein Abstimmungskampf **, der darauf abzielt, den betreffenden Webdienst innerhalb der angegebenen Bestimmungen an die Grenzen zu bringen.
Die Teilnehmer beschleunigen das als Thema angegebene Web-System nur für eine begrenzte Zeit (** 8 Stunden !! **). Wir verpflichten uns, das gesamte System zu lesen, zu verstehen und die Leistung zu verbessern.
Es ist in die Qualifikationsrunde und das Hauptrennen unterteilt, und nur 30 von insgesamt Teams gewinnen die Qualifikationsrunde, die der Außenposten ist! ** ** ** In jüngster Zeit wird es unter Beteiligung von Studenten weiter in allgemeine Slots und Studenten-Slots unterteilt. ** Allgemein 25 Teams **, ** Studenten 5 Teams ** werden ausgewählt.
** Der Gewinnerpreis beträgt 1 Million Yen! Es ist ein großzügiges Turnier namens **.
Es wurde bisher insgesamt 10 Mal abgehalten, und diesmal war es das 10. Mal zum Gedenken: klatschen:
Online qualifizierendes Sprachverhältnis
Das Gesamtranking der Nutzungsraten ist wie folgt.
Gehen Sie 276 Paare 59.0%
Ruby 81 Paare 17.3%
Python 47 Paare 10.0%
Knoten 29 Paare 6.2%
PHP 18 Paare 3.8%
Rost 8 Paare 1.7%
Perl 7 Paare 1.5%
Elixier 1 0 setzen.2%
original-Rubin 1 Satz 0.2%
Wir werden an dem Problem arbeiten, indem wir ein Team von 1 bis 3 Personen bilden.
Orthodoxe Konfigurationen wie Apps, Infrastruktur, Analyse und Befehl
Verwenden Sie Ihren eigenen Benchmark, um Ihre Punktzahl zu messen
Es können alle Mittel verwendet werden. Der Schlüssel besteht also darin, den Highscore-Score mit dem unten stehenden Benchmark zu berechnen. * Spielen Sie nicht mit dem Benchmark.
Diese Ausgabe erhielt eine Website namens issumo, auf der Sie nach ** Stühlen und Eigenschaften suchen und Materialien kaufen und anfordern können **. Die Hauptfunktionen waren wie folgt.
etc...
Dieses Mal gab es keine Verarbeitung wie Login, also Ich denke, es war ein reines Problem, herauszufinden, was der Engpass des Systems war. Persönlich war die Suche erstaunlich, vor allem durch Rückverfolgung! Die Benutzeroberfläche, die die Eigenschaftsinformationen innerhalb des Bereichs vom Breiten- und Längengrad des verfolgten Bereichs anzeigt, war gut ...!
Erstbetriebsprüfung der Anwendung
Ich war für den App-Teil verantwortlich. Überprüfen Sie daher nach dem Start des Wettbewerbs zunächst den Betrieb der App
Dieses Mal konnte ich nur über den Plattformserver zugreifen und konnte keine gute Verbindung herstellen. Deshalb entschied ich mich, weiterzumachen.
danach
Infrastruktur-Teammitglieder stellten Quellcode-Backup und Git-Management zur Verfügung, sodass ssh bei Ihnen liegt
Ich habe den Quellcode gelesen, für jede Funktion Kommentare abgegeben und den Endpunkt geschrieben.
DB (um MySQL)
Ich stellte fest, dass die DB wie ein Engpass war, also legte ich einen Index darauf und wiederholte die Messung mit EXPLAIN.
Selbst wenn ich einen Index einfügte, änderte sich das Ergebnis nicht und ich fragte mich, was passiert war: ausdruckslos:
Konsultierte das Team und ersetzte das, was ursprünglich mit mysql5.7 funktionierte, durch mysql8 >> Das Ergebnis war, dass die anfängliche Punktzahl halbiert wurde: schreien:
Ich befürchtete, dass durch Drehen des Bench-Markers die Daten initialisiert und der Index verschwinden würde. Daher schlug ich vor, ihn der Tabellendefinition in schema.sql hinzuzufügen.
SQL & Antwortverbesserung
Verbessertes SQL, das schlampig "COUNT (*)" ist, und SQL, das "SELECT *" ist
Ich habe die Abfrage, die jedes Mal auf der Zielseite geladen wird, in Redis eingefügt und von dort abgerufen.
Ich habe die Abfrage umgeschrieben, die 5 ODER-Bedingungen mit Union verkettet hat, aber als Ergebnis habe ich aufgegeben, weil die Bank nicht bestanden hat ...
Wenn Sie es so zusammenstellen, können Sie deutlich sehen, dass ich mich an diesem Tag überhaupt nicht bewegen konnte. Obwohl ich normalerweise ausschließlich für das Frontend arbeite, stellte ich fest, dass mir überwiegend Kenntnisse und Erfahrungen im Zusammenhang mit dem Backend fehlten. Um ehrlich zu sein, bin ich wirklich enttäuscht.
Wenn ich später zurückblicke, fand ich es mitten im Kommentieren von ** Like Search Part ** und ** N + 1-Like Part ** (Trace Search) ** Ich wurde in anderen Arbeiten begraben **, was ein Reflexionspunkt ist. Außerdem konnte ich mir keine Möglichkeit vorstellen, die Abfrage zu verbessern, und ich war fassungslos, also wenn es keine gab Ich denke, ich könnte meine Hand etwas mehr bewegen. Normalerweise berühre ich Go nicht, daher ist es möglicherweise eine gute Idee, mit Go einen Backend-Server zu erstellen. Auf jeden Fall war sich ISUCON seiner mangelnden Fähigkeiten sehr bewusst. Aber es hat wirklich Spaß gemacht! Es war eine gute Gelegenheit, verschiedene Kenntnisse und Sprachen zu erwerben, die ich normalerweise nicht anfasse. Es gab auch eine Implementierung in Deno, daher dachte ich, es wäre eine Ameise, Typoskript im Backend zu verwenden.
Diesmal war die Datenbank nur eine Eigenschaft, und es gab keine SQL, die sich gegenseitig verband. Einige Teams haben also die Aufgabe, jede Datenbank zuzuweisen, grob erledigt! Die Ideen, die ich mir einfallen lassen kann, sind schon erstaunlich. .. .. !!
Ich fand das Management, das die Dinge sammelte, die normalerweise samstags und sonntags samstags stattfinden, und 500 Teilnehmergruppen wirklich erstaunlich. Vielen Dank: Lächeln:
Es wird unter http://isucon.net/archives/55025156.html veröffentlicht!
Recommended Posts