MongoDB auf EC2 skalieren oder sollte ich einfach zu DynamoDB wechseln?

8

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 optimieren
  • Minimale Änderungen an meinem Code (der Code ist in Perl)
  • Möglichkeit zum nahtlosen Hinzufügen / Entfernen von Webservern, ohne sich um Datenverluste in der Datenbank kümmern zu müssen
  • Niedrige Kosten

Kurzfristig 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

  1. Verwenden Sie SimpleDB für den Benutzerpersonalisierungsspeicher und MongoDB für den Index. Lassen Sie den Index auf allen Rechnern replizieren, aber ich weiß nicht viel über die MongoDB-Replikation.
  2. Alles auf SimpleDB verschieben
  3. Alles auf DynamoDB verschieben

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?

    
ZenoriInc 19.02.2012, 22:57
quelle

4 Antworten

3

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.

    
Joe 19.02.2012 23:30
quelle
3
  

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".

    
Gates VP 20.02.2012 19:06
quelle
1

Achten Sie darauf, dass EC2 im Moment keine kleinen 64-Bit-Instanzen hat, was die Replikation potenziell teuer macht. Da MongoDB-Speicher Dateien zuordnet, wird ein 32-Bit-Betriebssystem nicht empfohlen.

    
Bryce 21.02.2012 16:41
quelle
1

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!

    
xdg 29.02.2012 03:54
quelle