Heim > Artikel > Backend-Entwicklung > Ihre Suchmaschine, Zensearch
Von der Erstellung von Reaktionsanwendungen bis hin zur Erstellung meiner eigenen Suchmaschine und meines eigenen Webcrawlers für die Indizierung. Ich freue mich, Ihnen Zensearch vorzustellen, eine Suchmaschine, bei der Sie als Benutzer mehr Kontrolle darüber haben, wie Ihre Suchanfragen aussehen sollen. Sie können Einträge erstellen, um verschiedene Websites zu crawlen, und die Suchmaschinenfunktionalität weiterhin nutzen, sofern vorhanden Ich habe Daten in der Datenbank indiziert, während sie ihre Arbeit verrichtet. Jetzt weiß ich, dass dies vielleicht nicht die komplexeste oder ausgefeilteste Suchmaschine der Welt wie Google oder Brave Search ist, aber ich habe diese Funktion entwickelt, um abzuschätzen, wie viel ich alleine tun und lernen kann so viel ich kann dabei, und oh Mann, ich habe eine Menge gelernt.
Alles begann, als ich meine React-Webanwendung erstellte, eine Art alltägliches Buch zum Einfügen Ihrer Lieblingszitate oder zum Hinzufügen von Notizen zu einer bestimmten Seite, als ob Sie versuchen würden, sich mit dem Autor zu unterhalten oder Ihre Gedanken aufzuschreiben In diesem Moment auf einer Seite, die der Seite Ihres physischen Buches entspricht, ist es kein schlechtes Projekt, aber es hat mich einfach so gelangweilt, Reactjs-Anwendungen zu erstellen, nicht dass es schlecht wäre, aber es fühlte sich an, als würde ich damit nirgendwo hinkommen, Es gibt keine technische Tiefe zu dem, was ich getan habe, und ich habe durch die Erstellung dieser ReactJs-Projekte nichts gelernt.
Also habe ich versucht, etwas über Computernetzwerke, Betriebssysteme, Computerarchitektur usw. zu lernen, nachdem ich ein paar Monate lang mein eigenes Anwendungsschichtprotokoll wie einen Websocket studiert und aufgebaut hatte, in dem ich mehrere Benutzer verwalten kann und jeder Benutzer diesen unterschiedlichen beitreten kann Räume oder Namensräume, in denen sie miteinander kommunizieren können, und ich fühlte mich begeistert, sogar lebendig. Ich hatte das Gefühl, dass ich so viele Dinge tun könnte, solange ich verstehe, wie der Computer funktioniert, z. B. Threads, Semaphoren, Prozesse, Speicherlayout, Interrupt-Signale usw. Also dachte ich mir, welche Projekte kann ich machen, um einige dieser Dinge zu nutzen Ich habe gelernt?
Oh, und ich bin übrigens Autodidakt und habe das Odin-Projekt genutzt, um Programmieren und Webentwicklung zu lernen. Also loben Sie diese Jungs, denn sie haben mir beigebracht, wie man beim Lernen unabhängig wird, und sich während des gesamten Lehrplans geweigert, Programmierer an der Hand zu halten .
Ich konnte nur mit Nodejs programmieren, das war neben Typoskript mein Lebensunterhalt, also habe ich den Webcrawler mit Nodejs erstellt ... ziemlich dumm, oder? Ich meine, der Plan bestand darin, einen Crawler zu erstellen, der eine Reihe von Quell-URLs vom Frontend aus crawlen kann und jeden Crawler diese extrahierten Daten an die Datenbank senden lässt. Wie wir alle wissen, ist Yabascript Single-Threaded und jede asynchrone Aufgabe wird verarbeitet durch die Umgebung, in der Yavascript ausgeführt wird, z. B.: API, Node, Deno, Bun und fertig des Browsers.
Das Ausführen von Multitasking-Vorgängen mit Nodejs war also eine Selbstmordmission, und zwar von der Konvertierung des zu kodierenden Webseitenobjekts in einen 8-Bit-Puffer, aber dann kann der gemeinsam genutzte Array-Puffer aufgrund von Daten nur 64-Bit-Array-Puffer transportieren Ausrichtung, also musste ich vom 8-Bit-Puffer auf 64-Bit konvertieren, indem ich einige Offset-Paddings hinzufügte, und dann vom 64-Bit-Puffer auf den 8-Bit-Puffer zurück, nachdem ich Daten vom Crawler an den Hauptthread gesendet hatte dann schließlich das Parsen in ein Vajascript-Objekt ... Wow, das hat Spaß gemacht, es gibt eine andere Möglichkeit zur Nachrichtenübermittlung, aber dadurch wird eine Kopie der gleichen Daten erstellt, die sich im Crawler im Hauptthread befinden, also wollte ich das seitdem nicht mehr tun es würde so viel Speicher beanspruchen.
Ich musste die Rennbedingungen mit dem Atomics-Modul von nodejs bewältigen, und um ehrlich zu sein, verstehe ich bis heute immer noch nicht, wie dieses Modul überhaupt funktioniert, und es hat mich so sehr geärgert, dass ich mich an Golang wenden musste. Ich liebe diese Sprache so sehr, es ist so einfach, Threads zu erstellen, die Race Conditions verarbeiten, Semaphoren und Wartegruppen verwenden, ich hatte noch nicht das Bedürfnis, Mutex zu verwenden, und ich freue mich darauf, sie vielleicht in Zukunft zu lernen, zusammen mit Es würde Spaß machen, den Kontext zu lernen.
Lassen Sie uns mit dem Frontend fortfahren, oder? Hat jemand von euch diesen Artikel von Frontend-Mastern gelesen? Möglicherweise benötigen Sie dieses Framework nicht. Erinnern Sie sich daran, dass ich gesagt habe, dass mir ReactJs langweilig wird? Nun, das hat mich dazu gebracht, Frameworks aufgrund ihrer Wiederverwendbarkeit und ihrer Datenbindungsmechanismen zu schätzen.
Ich möchte nicht zu sehr auf das Front-End eingehen, aber ich habe ein PubSub-Muster verwendet, um alle UI-Änderungen zu aktualisieren, wenn sich Daten ändern, und Webkomponenten zusammen mit dem Shadow-Dom verwendet, um wiederverwendbare Komponenten, den Shadow-Dom, zu erstellen Der Zugriff in Javascript und im Stil war mühsam, da es vom gesamten Dom-Baum isoliert ist, sodass der Zugriff über CSS und die DOM-API nicht funktioniert. Das waren also die einzigen Herausforderungen, die ich hatte, aber es hat Spaß gemacht. Es hat Spaß gemacht, als ich War Migration des Crawlers von Nodejs nach Go.
Es gibt einige Funktionen, die ich noch nicht implementiert habe, weil ich das Projekt unbedingt präsentieren wollte, aber das macht mir nicht so viel aus, selbst wenn es sich um ein laufendes Projekt handelt, wird es kein einmaliges Projekt sein Fertiges Projekt Ich werde Zensearch in Zukunft weiter verbessern, daher fehlen vorerst einige wichtige Dinge:
Implementierung einer Liste bereits indizierter Websites, die den Benutzern im Frontend angezeigt wird.
Speichern Sie die zuletzt gecrawlte Webseite zur Fortsetzung.
Erstellen Sie einen Abbruch für das Crawling, aber speichern Sie trotzdem die bis zu diesem Zeitpunkt indizierten Seiten.
Rabbitmqs Nachrichtengrößenbeschränkung für die Skalierung: Wenn eine Datenbank mehr als die in Rabbitmq festgelegte Standardgröße enthält, gibt der Nachrichtenbroker einen Fehler aus und stürzt ab. Um dies zu vermeiden, werde ich versuchen, einen Fensterrahmen zu implementieren Algorithmus, der in TCP verwendet wird, indem ein Pipelining-Mechanismus erstellt wird, bei dem das Array von Webseiten in Segmente aufgeteilt und in der Größe N an die Suchmaschine gesendet wird, wobei N die Größe des Fensters ist, muss ich noch darüber nachdenken das.
Geben Sie Benutzern die Möglichkeit, ihre indizierten Websites zu entfernen.
Ich würde gerne mehr über das, was ich gelernt habe, und einige Nuancen meiner Entwicklungsreise schreiben, aber ich denke, das würde zu lang werden, deshalb möchte ich vorerst mein größtes Projekt vorstellen und würde mich über Feedback freuen Ich schreibe euch, wenn ihr Zeit habt, und sagt mir Bescheid, wenn es irgendwelche Probleme und Verbesserungen gibt, die ich tun könnte, um Zensearch besser zu machen. Oh, und das ist alles dank theprimeagean. Dieser Typ hat mich dazu inspiriert, tiefer in die Dinge einzusteigen und stattdessen die Grundlagen zu lernen einfach nur zu rennen npm create vite@latest my-vue-app -- --template reagieren-ts im Terminal, was mich zwar über mich selbst als Programmierer und die Dinge, die ich weiß, unsicher gemacht habe, aber aufgrund dieser Unsicherheit habe ich jetzt neue Dinge gelernt Ich bin immer bestrebt, mehr zu lernen und würde mich freuen, aus IHREM Feedback zu lernen. Vielen Dank, dass Sie sich meinen Ted-Vortrag anhören.
Github-Repository für Zensearch
Das obige ist der detaillierte Inhalt vonIhre Suchmaschine, Zensearch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!