Warum wird C++ als Cgi-Sprache oft kritisiert? C++-Backend für ein Autocomplete-Feld im Vergleich zu PHP / Java EE
-
Liebes Forum,
im Moment überlege ich, wie ich ein Backend für eine Autocomplete-Suche mit möglichst guter Performance umsetze. Als Datenquelle dient eine My-Sql Datenbank.
Zuerst dachte ich an eine PHP-Anwendung, die eine Fulltest-Suche in der Datenbank durchführt und die Ergebnisse an das Autocompletefeld weitergibt, allerding bietet mir MySQL zu wenig Möglichkeiten für das Scoring der Ergebnisse.
Ich will zum Beispiel festlegen, dass weniger Wörter insgesamt eine höhere Priorität haben, als viele Wörter, auch wenn das gesuchte Wort zwei mal im Text vorkommen sollte.Als Alternative habe ich daran gedacht, ein Java-Servlet als Backend zu schreiben, vielleicht in Kombination mit Lucene, um die Datenbank zu indizieren. Das Problem ist, dass Servlets ja in verschiedenen JVM's laufen können und die Contexte selber auch noch in mehreren Instanzen vorliegen können.
Wenn ich mich nicht irre, führt das doch dazu, dass der Index ständig neu eingelesen werden muss, wodurch die Performance enorm nachlassen würde.Am sinnvollsten erscheint es mir, eine C++ Anwendung zu schreiben, welche die Datenbank indiziert und den Index dann (auf einer Unix-Platform) als Shared Memory anlegt.
Wenn die Instanzen des Cgi-Programms dann nur lesend auf den Sharend Memory zugreifen, dürfte es doch auch zu keinen Komplikationen, wegen des gleichzeitigen Zugriffs führen, oder?
Im Ram sollte der Index jedenfalls verdammt schnell und effizient sein.Sind meine Überlegungen richtig, oder gibt es einen Haken? Bisher habe ich eigentlich nur gelesen habe, dass es nicht ratsam wäre, Cgi-Anwendungen in C++ zu schreiben. Warum eigentlich? C++ bietet doch mit Pipes und Shared Memory die besten Möglichkeiten der Inter-Process-Kommunikation?
Danke für den Senf, den ihr hoffentlich dazugebt
-
Wegen der Buffer-Overflow Möglichkeiten die der ungeübte C++ Progger reinbaut
-
Von wieviel gleichzeitigen Zugriffen reden wir?
Google macht das ganze zB in C++ und hat Python fuer die meisten Frontend Sachen. Aber die haben ja auch unmengen an Daten
Wenn du wenige Daten hast, kannst du sie in einem node.js Server halten. Das ist aktuell das schnellste wenn die Daten in den Speicher passen.
-
Es ist unschwer zu erkennen, dass ich tatsächlich C++ für die Webprogrammierung bevorzuge. Allerdings nicht als CGI.
Das klassische CGI startet für jeden Request einen Prozess. Bevor Dein C++-Programm zur Verarbeitung kommt, die es sicher sehr schnell ausführen wird, ist beispielsweise ein PHP Skript in der Regel bereits fertig. Auch muss ein CGI Programm in C++ jegliche Initialisierung bei jedem Request ausführen. Da fallen Caching-Mechanismen wie beispielsweise ein Connectionpool zur Datenbank weg.
Es kann in Spezialfällen dennoch schneller sein. Wenn Du sehr rechenintensive Algorithmen ausführen willst, dann kann die Prozessinitialisierung schon noch lohnen.
Das war eine der Überlegungen, die mich dazu gebracht haben, meinen eigenen Webapplikationsserver für C++ zu schreiben.
-
node.js kannte ich noch gar nicht! Sieht jedenfalls sehr interessent aus, zumal scheinbar auch C++ Module sehr leicht in Node.js integriert werden können.
Damit werde ich mich mal beschäftigen. Ist Node.js denn schon als kompletter Apache+PHP+Tomcat-Ersatz ausgereift? Die Performance soll ja zumindest sehr gut sein.Vielleicht werde ich erstmal eine C++ Anwendung in Erwägung ziehen, die die ganze Zeit im Hintergrund läuft, den Index verwaltet und über Pipes mit PHP kommuniziert. Ist die Performance von Pipes akzeptabel?
Danke auf jeden Fall für die Interessanten Beiträge!
-
Richi schrieb:
Ist Node.js denn schon als kompletter Apache+PHP+Tomcat-Ersatz ausgereift?
Nein.
Vielleicht werde ich erstmal eine C++ Anwendung in Erwägung ziehen, die die ganze Zeit im Hintergrund läuft, den Index verwaltet und über Pipes mit PHP kommuniziert. Ist die Performance von Pipes akzeptabel?
Das ist wohl so ziemlich die Definition eines Datenbankservers.