Datenbank sharting auf Heroku

8

Irgendwann in den nächsten Monaten wird unsere App so groß sein, dass wir unsere DB zerlegen müssen. Wir verwenden Heroku zum Hosten, Node.js / PostgreSQL-Stack.

Konzeptionell ist es sinnvoll, dass in unserer App jeder logische Shard einen Benutzer und alle mit diesem Benutzer verknüpften Daten repräsentiert (jeder Nutzer unserer App generiert viele Daten und es gibt keine Interaktionen zwischen den Nutzern). Wir müssen die Fähigkeit des Benutzers beibehalten, komplexe Ad-hoc-Abfragen seiner Daten durchzuführen. Ich habe viele Artikel wie diesen gelesen, in denen es um Sharding geht: Ссылка

Ich verstehe konzeptionell, wie Sharding funktioniert. In der Praxis weiß ich jedoch nicht, wie ich das auf Heroku umsetzen soll, was Code ist, den ich schreiben muss und welche Teile meiner Anwendung ich modifizieren muss. Ein Link zu einem Tutorial oder einigen Zeigern würde sehr geschätzt werden.

Hier sind einige Ressourcen, die ich bereits angeschaut habe:

raviparikh 13.02.2013, 19:16
quelle

2 Antworten

0

Ich bin nicht sicher, ob ich das "sharding" nennen würde.

In LedgerSMB ist hier, wie wir Dinge tun. Jede Firma (Geschäftseinheit) ist eine separate Datenbank mit vollständig getrennten Daten. Daten können nicht zwischen Unternehmen geteilt werden. Ein PostgreSQL-Cluster kann beliebig viele Firmendatenbanken ausführen. Wir haben eine administrative Schnittstelle, die die Datenbank erstellt und das Schema lädt. Die Verwaltungsschnittstelle kann auch neue Benutzer erstellen, die (optional) zwischen Unternehmen geteilt werden können. Ich weiß nicht genau, wie gut es wäre, Benutzer zwischen dbs auf Heroku zu teilen, aber ich schließe dieses Detail in Bezug darauf ein, wie wir mit PostgreSQL arbeiten.

Das ist also ein praktikabler Ansatz.

Was Sie wirklich brauchen, ist etwas, um Datenbanken hochzufahren und Benutzer automatisiert zu verwalten. Von dort können Sie verlangen, dass der Benutzer einen Firmennamen angibt, den Sie einer Datenbank beliebig zuordnen können (diese Zuordnung könnte beispielsweise in einer anderen Datenbank gespeichert werden).

Ich weiß, das ist ziemlich hoch. Es sollte dir aber gleich losgehen.

    
Chris Travers 26.04.2013 14:22
quelle
0

Als der Autor des ersten Artikels glücklich in weiter zu läuten. Wenn es darum geht, eine der Schlüsselkomponenten zu sharten, ist der Schlüssel, auf dem Sie sharding sind. Die Komplexität des Sharding kommt erst zum Tragen, wenn Daten über verschiedene physische Knoten hinweg miteinander verbunden sind. Wenn Sie so etwas wie eine Multi-Tenant-App sind und dann alle Ihre Daten nach dieser Idee eines Mandanten oder Kunden modellieren, kann sehr sauber in diesem Setup passen . In diesem Fall werden Sie alle Tabellen, die sich auf den Kunden beziehen, aufschlüsseln und sie auf dieselbe Weise wie andere mandantenbezogene Tabellen zerlegen.

Um dies auf Heroku zu tun, gibt es zwei Möglichkeiten. Sie können Ihre eigenen mit Heroku Postgres und Anwendungslogik oder mit etwas wie Citus (das ist ein Add-on, das hilft, mehr davon für Sie zu verwalten) rollen.

Wenn Sie eigene Rollen erstellen, erstellen Sie zuerst die verschiedenen Anwendungslogik, um alle Ihre Shards zu erstellen und zu wissen, wohin die entsprechenden Abfragen geleitet werden sollen. Für Rails gibt es einige Edelsteine, die dabei helfen können, wie activerecord-multi-tenant oder wohnung . Wenn es darum geht, tatsächlich zum Sharding und der Migration zu wechseln, solltest du einen Heroku-Follower erstellen. Während der Migration werden Sie beginnen, nicht zu folgen. Dann werden Sie die Hälfte der Daten von der ursprünglichen primären und die andere Hälfte von dem Follower, den Sie getrennt haben, entfernen.

    
CraigKerstiens 17.04.2017 14:05
quelle