2017-06-13 6 views
1

Ich bin gerade dabei, am Backend für eine mobile App zu arbeiten (zunächst iOS/Android, später auch Website) und ich denke darüber nach, ob Realm all meine Bedürfnisse erfüllen könnte.Gemeinsame Nutzung bestimmter Daten zwischen Realms

Die Grundidee ist, dass es zwei Arten von Benutzern gibt - Kunden und Service-Provider. Die Kunden senden gelegentlich Anfragen an den Server und werden (Echtzeit) für jedes Ereignis abonniert, das in Bezug auf diese Anfrage in der Zukunft auftreten könnte. Jeder Dienstanbieter lauscht auf bestimmte Anfragen von allen Kunden und ist derjenige, der verschiedene Ereignisse (Daten senden) für jede dieser Anfragen auslöst.

Von den Realm-Dokumenten ist es offensichtlich, dass die Echtzeit-Datensynchronisation kein Problem sein wird. Es geht mir darum, wie man das Szenario (Kunde/Dienstleister) in der Realm-Welt modellieren kann. Basierend auf dem, was ich gelesen habe, ist es bevorzugt, einen Bereich pro Benutzer zu haben. Daher nehme ich an, dass sich der Benutzer registriert und ein Realm erhalten wird. Wann immer er eine Anfrage stellt, wird sie in seinem Reich gespeichert. Jetzt stellt sich die Frage, wie der Service-Provider modelliert werden soll. Es wird verschiedene Service-Provider geben, die auf verschiedene Arten von Anfragen reagieren (verschiedene Arten von Ereignissen bis zu einer Stunde nach Anfrage auslösen). (Jeder Benutzer kann jede Anfrage senden und wird daher von jedem Service-Provider bedient.)

Ich lese ein wenig darüber, dass Realm die gemeinsame Nutzung von Daten zwischen verschiedenen Realms unterstützt, was eine Teillösung für dieses Problem sein könnte, aber ich war nicht in der Lage um herauszufinden, ob diese "Freigabe" nur bestimmte Anforderungen teilen könnte. (Dies bedeutet, dass jeder Service-Provider nur für ihn bestimmte Anfragen erhält.)

Meine Frage ist, ob dieses Szenario mit Realm machbar ist?

Antwort

3

Das klingt wie eine perfekte Passform für Realms Server-Seite event-handling. Einfach gesagt, Realm bietet die Möglichkeit über unser Node SDK auf Änderungen in Realms auf dem Server zu warten.

In Ihrem Beispiel, in dem jeder mobile Benutzer sein eigenes Realm hätte, wäre die URL dafür /~/myRealm, in der die Tilde die Realm-Benutzer-ID darstellt. Mit der Node SDK-Ereignisbehandlungs-API können Sie eine JS-Funktion registrieren, die als Reaktion auf Änderungen ausgeführt wird, die durch ein Regex-Muster für Realm-URLs dargestellt werden. In diesem Fall könnten Sie verwenden: ^/([0-9a-f]+)/myRealm, so dass jedes Mal, wenn ein Benutzer myRealm aktualisiert, der Server einige Logik durchführen könnte.

Auf diese Weise ist der Server über das Node SDK wirklich ein "Super-User" oder Service-Provider, wie Sie beschreiben. Wenn ein Ereignis ausgelöst wird, enthält die JS-Funktion, die ausgeführt wird, den aktualisierten Bereich und eine Liste der Indizes, die zu den Objekten im Bereich gehören, die eingefügt, gelöscht oder geändert wurden. Sie können dann jede Logik in JS ausführen, z. B. die geänderten Daten verwenden, um eine andere API aufzurufen oder das betreffende Realm oder andere zu öffnen und Änderungen zu schreiben, die an die entsprechenden Clients zurückgeschickt werden.

Die vollständige serverseitige Ereignisbehandlung ist Teil der Realm Professional Edition, aber wir haben vor kurzem eine andere Möglichkeit zur Interaktion mit dieser namens Realm Functions veröffentlicht. Dies bietet die Möglichkeit, über das Dashboard des Servers dieselben JS-Funktionen zu erstellen, die als Reaktion auf Änderungen in Realms ausgeführt werden. Die Developer Edition unterstützt 3 Funktionen, so dass Sie es sofort ausprobieren können!

+0

Wenn ich es richtig verstehe, werde ich alle Änderungen in allen Realms vornehmen, herausfinden, welcher Service-Provider dieses Event erhalten soll und es dann in seinen Realm einfügen, so dass der Bereich 'Engine' alle verbundenen Clients benachrichtigt dieses Reich (in Reichszeit). Meine einzige Sorge ist die Datenduplizierung, da die Aufzeichnung gleichzeitig in zwei Realms gespeichert wird, aber ich nehme an, dass wir das nicht umgehen können ... (Es gibt nichts Schöneres, als nur Zeiger auf Zeilen als Mittel zum Teilen von Daten zwischen Realms zu erzeugen Daten werden tatsächlich dupliziert, oder?) – user3559787

+0

Momentan müssen Daten über Realm dupliziert werden, aber in Zukunft planen wir, Unterstützung für das Synchronisieren von Teilmengen von Daten von einem einzelnen Realm zu Clients anzubieten, sodass Sie einfach einen Link hinzufügen oder eine Eigenschaft anpassen können die Teilmenge, die an eine bestimmte Gruppe von Clients gesendet wird. –

Verwandte Themen