Frage

Ich mag wirklich SimpleDB verwenden, aber ich mache mir Sorgen, dass es ohne wirklichen Schließ- und Transaktionen das gesamte System tödlich fehlerhaft ist. Ich verstehe, dass für High-Lese- / Low-Schreib-Anwendungen ist es sinnvoll, da schließlich das System konsistent wird, aber was über diese Zeit dazwischen? Scheint die richtige Abfrage in einem inkonsistenten db aufzuspüren würde Chaos in der gesamten Datenbank in einer Art und Weise verewigen, die sehr hart ist. Hoffentlich bin ich nur eine Sorge Warze zu sein ...

War es hilfreich?

Lösung

Dies ist ziemlich klassischer Kampf zwischen Konsistenz und Skalierbarkeit und - bis zu einem gewissen Grad - Verfügbarkeit. Einige Daten muss nicht immer das, konsequent zu sein. Zum Beispiel, Blick auf digg.com und die Anzahl der Diggs gegen eine Geschichte. Es gibt eine gute Chance, dass Wert in der „digg“ Datensatz dupliziert wird, anstatt die DB zwingen zu tun, verbinden eine gegen die „user_digg“ -Tabelle. Spielt es eine Rolle, ob diese Zahl nicht vollkommen genau ist? Wahrscheinlich nicht. Dann mit so etwas wie SimpleDB könnte gut passen. Allerdings, wenn Sie ein Bankensystem schreiben, sollten Sie wahrscheinlich Konsistenz vor allem zu schätzen wissen. :)

Wenn Sie nicht vom ersten Tag wissen 1, die Sie mit großem Maßstab zu tun haben, würde ich bleibe einfach mehr konventionellen Systemen wie RDBMS. Wenn Sie irgendwo mit einem vernünftigen Geschäftsmodell arbeiten, werden Sie hoffentlich einen großen Anstieg der Einnahmen sehen, ob es ein großer Dorn im Verkehr ist. Dann können Sie das Geld verwenden, um die Skalierungsprobleme zu lösen. Die Skalierung ist hart und Skalierung ist schwer vorherzusagen. Die meisten der Skalierung Probleme, die Sie verletzt werden diejenigen, die Sie nie erwartet.

Ich würde viel bekommen eher eine Website aus dem Boden und verbringen Probleme beheben einige Wochen Skala, wenn der Verkehr abholt dann so viel Zeit damit verbringen, sich Gedanken über die Skala, dass wir es nie zu Produktion machen, weil wir das Geld ausgeht. :)

Andere Tipps

Unter der Annahme, Sie sprechen dieser SimpleDB, Sie ist nicht ein worrywart ist; gibt es echte Gründe nicht, um es als reale Welt DBMS zu verwenden.

Die Eigenschaften, die Sie von Transaktionsunterstützung in einem DBMS bekommen können durch das Akronym „A.C.I.D.“ abgekürzt werden: Unteilbarkeit, Konsistenz, Isolation und Dauerhaftigkeit. Die A und D haben meist mit Systemabstürzen und die C zu tun, und ich habe mit dem regulären Betrieb zu tun. Sie sind alle Dinge, die Menschen völlig selbstverständlich ist, wenn sie mit kommerziellen Datenbanken arbeiten, also, wenn Sie mit einer Datenbank arbeiten, die nicht über eine einzige oder mehrere von ihnen, dass Sie vielleicht in eine beliebige Anzahl von bösen Überraschungen.

Atomicity : Jede Transaktion wird entweder komplett voll oder gar nicht (das heißt es wird entweder bestätigen oder abbrechen sauber). Dies gilt für einzelne Aussagen (wie „UPDATE Tabelle ...“) sowie längere, kompliziertere Transaktionen. Wenn Sie diese nicht haben, dann alles, was schief geht (wie die Festplatte voll bekommen, der Computer abstürzt, etc.) könnten verlassen etwas halb fertig. Mit anderen Worten, können Sie nicht immer verlassen sich auf die DBMS wirklich tun, um die Dinge, die Sie, es zu sagen, weil eine beliebige Anzahl von Problemen der realen Welt in die Quere kommen kann, und sogar eine einfache Update-Anweisung könnte teilweise fertig bekommen.

Konsistenz : Alle Regeln, die Sie bis über die Datenbank festgelegt haben, werden immer erzwungen werden. Wie, wenn Sie eine Regel, die sagt A immer gleich B, dann nichts jemand an das Datenbanksystem funktioniert kann diese Regel brechen - es wird eine Operation fehlschlagen, die versucht. Dies ist nicht ganz so wichtig, wenn alle Ihr Code perfekt ist ... aber wirklich, wenn ist, dass immer der Fall ist? Plus, wenn Sie dieses Sicherheitsnetz fehlt, die Dinge wirklich eklig, wenn Sie verlieren ...

Isolation : Alle in der Datenbank genommen Aktionen werden ausgeführt, wenn sie seriell passiert (einer nach dem anderen), auch wenn sie in Wirklichkeit gleichzeitig sie geschieht (miteinander verschachtelt). Wenn mehr als ein Benutzer diese Datenbank zur gleichen Zeit getroffen wird, und Sie diese nicht haben, dann können Dinge, die Sie nicht einmal ausdenken wird schief gehen; selbst atomare Aussagen miteinander in unvorhergesehener Weise interagieren können und die Dinge vermasseln.

Haltbarkeit : Wenn Sie den Strom oder die Software abstürzt verlieren, was zu Datenbanktransaktionen geschieht, die im Gange waren? Wenn Sie Haltbarkeit haben, ist die Antwort „nichts - sie sind alle sicher“. Datenbanken tut dies, indem so genannte „Undo / Redo-Logging“ verwendet wird, wo jede kleine Sache, die Sie an die Datenbank wird zunächst (in der Regel auf einem separaten Datenträger für die Sicherheit) protokollierte in einer Art und Weise, so dass Sie den aktuellen Zustand nach einem Fehler rekonstruieren können. Ohne das sind die anderen Eigenschaften, die oben Art von nutzlos, weil man nie 100% sicher sein kann, dass sich die Dinge nach einem Absturz konsistent bleiben.

Sie Rolle, alle diese Dinge für Sie? Die Antwort hat alles, was mit den Arten von Transaktionen zu tun, Sie tun, und was garantiert Sie in einer Fehlersituation mögen. Es kann auch Fälle geben (wie eine Nur-Lese-Datenbank), wo Sie diese nicht benötigen, aber sobald Sie etwas zu tun, nicht-trivial beginnen und etwas Schlimmes passiert, werden Sie wünschen, Sie hätten ‚em. Vielleicht OK, es ist für Sie nur auf eine Backup jederzeit etwas zufällt Unvorhergesehenes passiert, aber meine Vermutung ist, dass es nicht ist.

Beachten Sie auch, dass alle diese Schutz fallen macht es nicht selbstverständlich, dass Ihre Datenbank eine bessere Leistung wird; in der Tat, es ist wahrscheinlich das Gegenteil. Das ist, weil die reale Welt DBMS-Software auch Tonnen von Code muss optimize Abfrageleistung. Also, wenn Sie schreiben eine Abfrage, die 6 Tische auf SimpleDB verbindet, nicht davon ausgehen, dass es die optimale Art und Weise herauszufinden, würde diese Abfrage auszuführen - Sie könnten am Ende Stunden warten, um es zu vervollständigen, wenn ein kommerzielles DBMS einen verwenden könnte indexierte Hash-Join und es in 0,5 Sekunden erhalten. Es gibt eine Unmenge kleine Tricks, die Sie tun können, Abfrage Performa zu optimierennce, und glauben Sie mir, werden Sie sie wirklich vermissen, wenn sie weg sind.

Nichts davon wird als ein Klopfen an SimpleDB gemeint; nehmen Sie es von der Autor der Software : „Obwohl es ein großes Lehrwerkzeug, kann ich mir nicht vorstellen, dass irgendjemand es für etwas anderes verwenden möchte. "

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top