2 Stimmen

Couchdb: eine Datenbank pro Konto versus alles in einer Datenbank mit einem Namensraum / Eigenschaft

Ich modelliere ein Dokumentenerstellungssystem in CouchDB. Es automatisiert teilweise die Erstellung von Vorschlägen und Präsentationsdokumenten aus überschaubaren Dokumentfragmenten.

Ähnlich wie zum Beispiel Basecamp zerlegt es sich sehr einfach in eigenständige Daten pro 'Konto'. Jedes Konto hat mehrere Benutzer, Projekte, Dokumente, usw. Es sollte jedoch nichts zwischen Konten geteilt werden.

Ich sehe zwei Möglichkeiten, dies zu tun:

  • eine couchdb-Datenbank pro Konto
  • Verwendung eines Namensraums/einer Eigenschaft zur Identifizierung des Kontos

Es scheint mir, dass der erste Ansatz konzeptionell sinnvoll ist und möglicherweise Sicherheits- und Partitionierungsvorteile hat. Es scheint mir jedoch, dass er einige datenbankübergreifende Datenaabfragen einschränkt (was ich momentan nicht benötige, aber man weiß ja nie...) und das Aktualisieren von Ansichten potenziell eine Menge Schreibvorgänge erfordert.

Hat jemand, der mit dieser Art von Entscheidung Erfahrung hat, irgendwelche Ratschläge?

1voto

JasonSmith Punkte 70486

Dies ist eine genaue Zusammenfassung der Situation und ich denke nicht, dass es eine All-in-One-Lösung gibt. Es hängt alles davon ab, wie wahrscheinlich es ist, dass Sie Informationen oder Berichte über die gesamte Benutzerbasis benötigen.

Ich möchte dich an zwei Dinge erinnern:

  1. Unternehmensanwendungen entwickeln sehr schnell die Notwendigkeit, Berichte zu erstellen, an die Sie bei der Architektur der Software nie gedacht haben. Was werden Sie tun, wenn ein Kunde fünf Konten hat und darauf besteht, dass Ihre Gesamtgebühren nicht stimmen? Ein charakteristisches Merkmal dieser Berichte ist, dass Sie sie in der Regel so schnell wie möglich benötigen.

  2. Sie können jedoch immer Replikation verwenden, um alle Datenbanken in eine riesige Datenbank (auch auf einer separaten Maschine) zusammenzuführen, um Berichte darauf auszuführen. Wenn Ihre Schlüssel nicht kollidieren, würde das ein wenig Arbeit ersparen, aber im Allgemeinen können Sie dies zum Laufen bringen.

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