4 Stimmen

Amazon EC2 & S3 bei Verwendung von Python / SQLite?

Angenommen, ich habe eine große SQLite Datei (z. B. 500[MB]), die in Amazon S3 . Kann ein python Skript, das auf einem kleinen EC2 Instanz direkt zugreifen und ändern その SQLite oder muss ich die Datei erst in den Ordner EC2 Instanz, ändern Sie sie dort und kopieren Sie sie dann nach S3 ?

Wird die E/A effizient sein?

Ich versuche Folgendes zu tun. Wie ich schrieb, habe ich eine 500[MB] SQLite Datei in S3 . Ich würde gerne anfangen zu sagen 10 different Amazon EC2 instances die jeweils eine Teilmenge der Datei lesen und verarbeiten (jede Instanz bearbeitet eine andere Teilmenge der 500[MB] SQLite Datei). Sobald die Verarbeitung abgeschlossen ist, aktualisiert jede Instanz nur die Teilmenge der Daten, die sie bearbeitet hat (wie erläutert, gibt es keine Überschneidung von Daten zwischen Prozessen).

Nehmen wir zum Beispiel an, dass die SQLite Datei hat Aussage 1M Zeilen :

instance 1 wird mit Zeilen umgehen (und diese aktualisieren) 0 - 100000

instance 2 wird mit Zeilen umgehen (und diese aktualisieren) 100001 - 200000

.........................

instance 10 wird mit Zeilen umgehen (und diese aktualisieren) 900001 - 1000000


Ist das überhaupt möglich? Klingt es gut? Vorschläge und Ideen sind willkommen.

6voto

Ich würde gerne 10 verschiedene Amazon EC2-Instanzen starten, die jeweils eine Teilmenge der Datei lesen und verarbeiten (jede Instanz verarbeitet eine andere Teilmenge der 500[MB] SQLite-Datei)

Mit SQLite ist dies nicht möglich, auch nicht auf der Amazon-Infrastruktur. sqlite führt Schreibsperren auf Datenbankebene durch. Wenn nicht alle zehn Knoten ausschließlich Lesevorgänge durchführen, wird keine Gleichzeitigkeit erreicht. Das steht sogar auf der SQLite-Website.

Situationen, in denen ein anderes RDBMS besser funktionieren kann

  • Client/Server-Anwendungen
  • Hochvolumige Websites
  • Sehr große Datensätze
  • Hohe Gleichzeitigkeit

Haben Sie PostgreSQL in Betracht gezogen?

0 Stimmen

Ich vermute, dass der OP ist auf der Suche nach Skalierung aufgrund der Verarbeitung Anforderungen, anstatt die DB-Gleichzeitigkeit. Wenn das der Fall ist, dann Sperren der DB wird (kann?) nicht ein Problem sein.

0 Stimmen

Dennoch neigt SQLite dazu, Transaktionen abzubrechen, wenn es das Gefühl hat, dass sie gleichzeitig stattfinden könnten. Die einzige Möglichkeit, dies zu tun, wäre die Verwendung einer Mutex-Sperre (etwas, das nicht in den Anwendungsbereich von SQLite fällt), um die Datenbank für einen Schreibvorgang zu erhalten. Jedes andere RDBMS als SQLite ist wahrscheinlich praktischer/bequemer.

0 Stimmen

Leute, ich danke euch. Die Sache ist die, dass ich nach Abschluss meiner Bearbeitung die Ergebnisse (= die SQLite Datei). Während MySQL oder so helfen kann, die Ergebnisse auf der Seite von Amazon zu speichern - wie kann ich die Ergebnisse auf meinen Computer zurückholen?

2voto

serialworm Punkte 763

Da S3 nicht direkt gemountet werden kann, ist es am besten, ein EBS-Volume zu erstellen, das die SQLite-Datei enthält, und direkt mit dem EBS-Volume von einer anderen (Controller-)Instanz aus zu arbeiten. Sie können dann Snapshots des Volumes erstellen und diese in S3 archivieren. Mit einem Tool wie boto (Python-API) können Sie die Erstellung von Snapshots und das Verschieben der Backups in S3 automatisieren.

0 Stimmen

Beringer: Ich danke Ihnen. Lassen Sie mich sicherstellen, dass ich das richtig verstehe: Kann die EBS Volume von allen 10 Instanzen aus zugegriffen (und der Inhalt geändert/aktualisiert) werden kann zur gleichen Zeit ?

0 Stimmen

Wenn er an eine Instanz angehängt ist, können Sie nfs verwenden, um ihn für die anderen Instanzen verfügbar zu machen.

2voto

Rakesh Sankar Punkte 9177

Sie können den S3-Bucket auf Ihrem Linux-Rechner mounten. Siehe unten:

s http://code.google.com/p/s3fs/wiki/InstallationNotes - Das hat bei mir funktioniert. Es verwendet das FUSE-Dateisystem + rsync zur Synchronisierung der Dateien in S3. Es speichert eine Kopie aller Dateinamen im lokalen System und macht wie eine DATEI/Ordner aussehen.

Das ist gut, wenn das System bereits vorhanden ist und mit großen Datenmengen arbeitet. Wenn Sie das System jedoch von Grund auf neu aufbauen, würde ich Ihnen empfehlen, ein EBS-Volume für SQLite zu haben und dieses Skript zu verwenden, um einen Snapshot Ihres EBS-Volumes zu erstellen:

https://github.com/rakesh-sankar/Tools/blob/master/AmazonAWS/EBS/ebs-snapshot.sh

0 Stimmen

Dankeschön. Die einzige Sache ist, dass ich irgendwo gelesen habe, dass ein EBS Volume nur auf eine Instanz gemountet werden kann, während ich ein Volume haben möchte, das von allen 10 instances . Wie kann ich vorgehen?

0 Stimmen

Ich bezweifle, dass Sie das tun können. Amazon EBS kann nicht von verschiedenen EC2-Instanzen gemeinsam genutzt werden. Aber Sie können Amazon S3 Bucket verwenden, es als ein Laufwerk verwenden und es mit einer beliebigen Anzahl von EC2-Instanzen teilen.

0 Stimmen

Ich danke Ihnen. Nach Ihrem Kommentar sieht es also so aus, dass die Montage S3 Bucket ist die einzige Möglichkeit, Daten über verschiedene EC2 Instanzen (d.h. eine EBS Lautstärke wird in diesem Fall nicht helfen). Ist das richtig?

2voto

Michael Anderson Punkte 65535

Wenn Ihre Datenbankstruktur einfach ist, warum verwenden Sie nicht einfach AWS simpledb ? Oder führen Sie mysql (oder eine andere DB) auf einer Ihrer Instanzen aus.

1 Stimmen

Wenn Sie Bedenken wegen der Schwierigkeit haben, ein DBMS zu verwalten, bietet Amazon einen gehosteten MySQL-Dienst namens RDS an, der recht einfach zu nutzen ist.

0 Stimmen

@TokenMacGuy: Vielen Dank. Die Sache ist die, dass ich nach der Verarbeitung die Ergebnisse (= die SQLite-Datei) übermitteln möchte. Während MySQL oder so helfen kann, die Ergebnisse auf der Seite von Amazon zu speichern - wie kann ich die Ergebnisse auf meinen Computer zurückholen?

0voto

mvtango Punkte 81

Amazon EFS kann von ec2-Instanzen gemeinsam genutzt werden. Es ist eine verwaltete NFS-Freigabe. SQLITE sperrt weiterhin die gesamte DB beim Schreiben.

Die SQLITE-Website empfiehlt jedoch keine NFS-Freigaben. Aber je nach Anwendung können Sie die DB für mehrere ec2-Instanzen schreibgeschützt freigeben und die Ergebnisse Ihrer Verarbeitung an einem anderen Ort speichern, um sie dann im nächsten Schritt zu verketten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X