2016-05-21 12 views
0

Ich habe camunda evaluierte Tage zu nutzen eingebettet in meinem Tomcat-Anwendung für ein paar, aber ich habe einige Performance Sorgen in Bezug auf Abtretungs und Variablen erhöhen, weiter mein Repository filtern . Es gibt einige einfache Anwendungsszenarien, die für mich von praktischem Nutzen sind:Leistung und Indizes in Camunda Prozess-Repository

1) Filtern Sie alle aktiven Aufgaben, die einem bestimmten Benutzer zugewiesen sind.

2) Filtern Sie alle aktiven Prozessinstanzen, die einem Kunden zugeordnet sind.

3) Filtern Sie alle aktiven Aufgaben von Prozessinstanzen, die einem Kunden zugeordnet sind.

Also meine größeren Bedenken sind:

a - Kann ich mich verlassen Anwendungsfall 1 Datenbankindizes auf Abtretungsempfänger, die mit einer stark bevölkerten Aufgabentabelle in der Zukunft gut durchführen werden?

b - Zum Anwendungsfall 2, werde ich hinzufügen, die Kunden-ID als Prozessebene Variable meine Prozessinstanzen um sich weiter zu filtern zu erreichen. Sind Variablen auch indiziert - vorausgesetzt, die Beauftragten sind? (Sagen wir, ich muss 20 Prozesse in einer 1 Million Prozesstabelle abfragen, die eine gegebene Variable gesetzt haben)

c - Schließlich, aus einer Sicht der Leistung, sollte ich replizieren die Kunden-ID-Variable in jeder Aufgabe und dann sie filtern, ohne die entsprechenden Prozessinstanzen zu prüfen?

ps1: Ich benutze Postgres-Datenbank als Repository und habe kein vollständiges Verständnis der zugrunde liegenden Struktur und Indizes unter der BPM-Engine. Wenn ein gewisses Verständnis erforderlich ist, um Indizes zu erstellen, die standardmäßig nicht verfügbar sind, würde ich mir einige Hinweise darüber überlegen, an welchen Tabellen/Spalten ich arbeiten sollte.

ps2: Ich habe es nicht mit einer kritischen gleichzeitigen Software zu tun, aber wird in naher Zukunft möglicherweise eine große Datenbanklast haben.

+1

Betrachten Sie die "businessKey" unter Verwendung von Prozessen und Aufgaben für einen Kunden-ID zu identifizieren. –

Antwort

1

Wenn Sie sich für Datenbankstruktur usw. interessieren, gibt es ein paar Dinge, die Sie betrachten können. Die Datenbankstruktur wird in [1] beschrieben.

Sie können die Scripts zum Erstellen von Datenbanken auch in den vorgefertigten Distributionen anzeigen. Betrachten Sie für Tomcat einen Ordner sql/create.

Um Ihre spezifischen Fragen zu beantworten; Es gibt eine Tabelle namens ACT_RU_TASK. Dies hat die Laufzeitaufgaben. Betrachtet man das SQL-Skript für Postgresql, gibt es einen Index ACT_IDX_TASK_ASSIGNEE auf ACT_RU_TASK (ASSIGNEE_). Daher sieht es so aus, als gäbe es einen Index für den Aufgabenempfänger.

Variablen sind ein wenig komplexer, da der Variablentyp bestimmen kann, wo er tatsächlich gespeichert ist.

Es gibt einen Index für businessKey. Wenn Sie also den businessKey verwenden, um die Kundennummer zu speichern, können Sie von businessKey ein wenig profitieren.

Abgesehen von der Hinzufügung von Indizes an geeigneten Stellen, ist eine andere Technik, die in Betracht gezogen werden muss, eine eigene Tabelle hinzuzufügen, die ein Index für die Engine ist. Wenn Sie beispielsweise Ereignislistener für Aufgaben oder Prozesslebenszyklen usw. verwenden, können Sie eine Tabelle mit Nachschlagewerten auf dem neuesten Stand halten.Daher können Sie eine Tabelle mit Kunden-ID und Prozess- oder Aufgaben-IDs oder einer bestimmten Variablen und Aufgaben-ID usw. aufbewahren. Sobald die Tabellen vorhanden sind, können Sie Kunden-SQL oder Plugins hinzufügen, um die Funktion zu verwenden.

[1] https://docs.camunda.org/manual/7.4/user-guide/process-engine/database/

(Beantwortet von Webcyberrob bei https://forum.camunda.org/t/performance-and-indexes-in-camunda-process-repository/650)