1

Wir haben eine webbasierte Enterprise-Anwendung mit mehreren Mandanten, die Hibernate über MySQL verwendet. Wir verwenden Jasper Reports für alle Berichte, die unsere Kunden benötigen, aber jetzt müssen wir auch Ad-hoc-Berichte anbieten, damit Benutzer ihre eigenen Abfragen ausführen können.Berichterstellung für Multi-Tenant-Webanwendung

Wie haben andere das erreicht?

Ich denke, dass ich haben folgende Möglichkeiten:

  1. einen vollständigen Export in Excel-Bereitstellung oder xml Format, bei dem ich die Entitäten Hydrat, so dass jede @ManyToOne mit dem toString() dieser Einheit ersetzt wird. Dies wäre so, dass die Daten für den Benutzer tatsächlich sinnvoll sind und nicht eine ganze Menge von Fremdschlüssel-IDs.

  2. Lassen Sie sie SQL gegen eine Datenbankkopie ausführen. Stellen Sie sicher, dass jede Tabelle eine TENANT_ID hat, lassen Sie sie auf die Datenbankkopie zugreifen, aber hängen Sie die ID an jede Abfrage hinter den Kulissen an. Ich konnte sogar sicherstellen, dass diese Datenbankkopie nur ihre Daten enthielt. Die Art des Multi-Tenant-Ansatzes wird jedoch in gewisser Weise abgelehnt.

Antwort

1

Wie komplex werden diese Benutzeranfragen sein? Beliebiges SQL? Oder können Sie HQL oder Criteria verwenden (und was ich damit wirklich meine ist, dass Sie Benutzer eine Art von QBE in UI definieren lassen, aber Sie werden derjenige sein, der die eigentliche Abfrage erstellt)? Im letzteren Fall könnten Filter auch etwas helfen.

Ich würde nicht mit (1) belästigen, es sei denn, Abfrageergebnisse sind immer nur Listen. Sie können Hierarchien/Beziehungen in XML darstellen, aber ich bezweifle, dass Ihre Benutzer dies begrüßen würden, da sie es verarbeiten müssten. Und die toString() - Methode ist so gut wie garantiert rückgängig zu machen, da verschiedene Benutzer an verschiedenen Renderings desselben Objekts interessiert sein müssen (zB wenn Sie eine Liste von As mit Bs zurückliefern, würde user1 ein anderes Ergebnis von B.toString wünschen.) dann user2).

(2) sollte funktionieren, wenn Sie wirklich beliebige SQL-Abfragen benötigen. Abhängig davon, wie komplex Ihre Datenbank ist und wie viele Benutzer Sie haben, können Sie möglicherweise mit dem Erstellen von Ansichten (pro Benutzer) anstelle von tatsächlichen Datenbankkopien zurechtkommen.

Verwandte Themen