Ich betreibe meine Website derzeit auf einem einzigen Server mit MongoDB. Auf meinem Server habe ich zwei Komponenten (1) einen Crawler, der stündlich läuft und Daten an meine MongoDB-Instanz anfügt (2) eine Website, die aus dem Crawler-Index liest und auch in eine Benutzerpersonalisierungs-DB schreibt. Ich wechsle zur automatischen Skalierung zu Amazon EC2, damit der Web-Server automatisch skalieren kann, sodass ich die Anzahl der Server erhöhen kann, wenn der Web-Verkehr zunimmt. Ich brauche keine automatische Skalierung für meinen Crawler. Dies ist eine Herausforderung für die Verwendung von MongoDB. Ich frage mich, was meine beste Option ist, auf
zu optimierenKurzfristig wird die DB sicherlich in der Lage sein, in allen Maschinen Platz zu finden, da sie unter 2 GB liegen wird. Die Benutzerpersonalisierungs-DB kann nicht neu erstellt werden, daher ist es wichtiger, dies zu haben, während der Index einfach neu erstellt werden kann. Der aktuelle MongoDB-Crawl-Index enthält ungefähr 100.000 Einträge, die in ~ 15 verschiedenen Spalten eingegeben werden. Dies ist auf Geschwindigkeit ausgelegt, da ich gerade an einer Online-Dating-Site arbeite (die in vielerlei Hinsicht durchsuchbar ist).
Ich kann mir ein paar Optionen vorstellen
Ich weiß nicht viel über SimpleDB und / oder DynamoDB. Basierend auf Artikeln scheint DynamoDB eine natürliche Wahl zu sein, aber ich bin mir nicht sicher über eine gute Perl-Unterstützung, ob ich alle Spalten, Index usw. haben kann. Jeder hat Erfahrung oder hat einen Ratschlag?
Sie könnten Mongo auf einem einzelnen Server auf EC2 hosten, mit dem jede Box in der Webfarm verbunden ist. Sie können dann einfach eine andere Web-Instanz hochfahren, die dieselbe DB-Box verwendet.
Wir haben derzeit drei Mongo-Server, während wir einen Replikat-Satz laufen lassen und wenn wir den Punkt erreichen, an dem wir horizontal mit Mongo skalieren müssen, werden wir einige neue Instanzen hochfahren und die größeren Sammlungen zerlegen.
Ich betreibe meine Website derzeit auf einem einzelnen Server mit MongoDB.
Zunächst ist das eine große rote Flagge. Bei der Produktion wird immer empfohlen, einen Replikatsatz mit mindestens drei vollständigen Knoten auszuführen.
Die Replikation bietet automatische Redundanz und Failover.
Möglichkeit, Web-Server nahtlos hinzuzufügen / zu entfernen, ohne sich um Datenverluste in der Datenbank kümmern zu müssen
MongoDB unterstützt ein Konzept namens sharding . Beim Sharding können Sie horizontal skalieren, indem Sie Daten automatisch partitionieren. Die Partitionierung erfolgt über einen Shard-Schlüssel .
Wenn Sie sharding verwenden möchten, lesen Sie den Link sehr sorgfältig und erkennen Sie die Einschränkungen. Für MongoDB Sharding müssen Sie den richtigen Schlüssel auswählen, mit dem Abfragen gleichmäßig über die Shards verteilt werden können.
Der aktuelle MongoDB-Crawl-Index enthält etwa 100.000 Einträge, die in ~ 15 verschiedenen Spalten eingegeben werden.
Das wird ein Problem beim Sharding sein. Das Sharding kann nur Abfragen skalieren, die den Shard-Schlüssel verwenden. Eine Abfrage des Shard-Schlüssels kann direkt an einen einzelnen Computer weitergeleitet werden. Eine Abfrage für einen sekundären Index wird an alle Maschinen gesendet.
Sie haben 15 verschiedene Indizes, daher werden im Grunde alle diese Abfragen auf alle Shards übertragen. Das wird nicht sehr gut "skalieren".
Ich habe sehr schlechte Erfahrungen mit SimpleDB gemacht und denke, dass es grundlegend fehlerhaft ist, also würde ich es vermeiden.
Drei ist ein gutes Whitepaper zur Einrichtung von MongoDB auf Amazon EC2: Ссылка
Ich vermute, dass die Einrichtung von MongoDB auf EC2 die schnellste Lösung im Gegensatz zu Neustrukturierung / Migration auf DynamoDB ist.
Viel Glück!
Tags und Links perl mongodb amazon-simpledb amazon-dynamodb