0

Geschwindigkeitsoptimierung: Große Menge an Datensätzen schneller verknüpfen.

Ich nutze die Desktop App von Ninox am Mac um Datensätze anhand des EAN Barcodes Produkten in unserer Tabelle zuzuordnen. In der Datenbank gibt es 188 Produkte und halbjährlich müssen aktuell circa 200.000 Einträge aus der Tabelle 'Curve Sales' zugewiesen werden. Da die Tabelle jedesmal jeden Eintrag prüft ob er bereits zugewiesen wurde oder nicht, dauert es jedes Mal länger und zum Teil mehrere Tage, manchmal wird auch der Vorgang abgebrochen. Gibt es eine Möglichkeit den Vorgang zu beschleunigen? AI Tools wie ChatGPT und Grok habe ich getestet kommen aber zu keinem verwertbarem Ergebnis. Hier der Code:

let produktListe := (select Produkte);
let counter := 0;
for i in select 'Curve Sales' where Produkte = null do
    let myProdukt := first(produktListe['UPC / EAN Barcode' = i.Barcode]);
    if myProdukt != null then
        i.(Produkte := myProdukt);
        i.(Kontaktgruppe := myProdukt.Artist);
        counter := counter + 1
    end
end;
alert("Es wurden " + text(counter) + " Datensätze aktualisiert.")

 

Was ein zusätzliches Problem sein könnte, warum der Vorgang so lange dauert:

Jeder Eintrag wird außer der Verknüpfung zu 'Produkte' auch einer 'Kontaktgruppe' zugewiesen. In einem zweiten Schritt müssen wir die Einträge auch entsprechend einem Prozentverhältnis welches in 'Produkte' festgelegt wurde 'Quittungen' zuweisen um daraus Abrechnungen an unsere Artists / 'Kontaktgruppen' zu erstellen. 'Quittungen' können erst erstellt werden sobald ein Mindestbetrag erreicht ist, daher hatte ich folgende Felder als Funktionsfelder in den 'Curve Sales' festgelegt, was vermutlich ungünstig ist:

Download Deal (Formel: Produkte.'Deal Download')
Download Stück (Formel: Produkte.'Stückpreis Artist Download')
Download Anteil (Formel: Produkte.'Anteil Artist Download')
Streaming Deal (Formel: Produkte.'Deal Streaming')
Streaming Stück (Formel: Produkte.'Stückpreis Artist Streaming')
Streaming Anteil (Formel: Produkte.'Anteil Artist Streaming')

NET_ARTIST (fkt.)

if text(Configuration) != "Download" and text('Streaming Deal') = "Anteil" then
    'Net Payable' * 'Streaming Anteil' / 100
else
    if text(Configuration) != "Download" and text('Streaming Deal') = "Stückpreis" then
        'Streaming Stück' * Units
    else
        if text(Configuration) = "Download" and text('Download Deal') = "Anteil" then
            'Net Payable' * 'Download Anteil' / 100
        else
            if text(Configuration) = "Download" and text('Download Deal') = "Stückpreis" then
                'Download Stück' * Units
            end
        end
    end
end

NET_LABEL (fkt.)

'Net Payable' - NET_ARTIST

Anfangs dachte ich es wäre eine gute Idee mit Funktionsfeldern zu Arbeiten, da es unterschiedliche Vertragsarten (Stück oder Anteil) gibt und sich diese auch in der Zukunft ändern können. Bei großen Datenmengen, ist es allerdings zu großer Aufwand. 

Ich bräuchte unbedingt Hilfe das Datenmodell so umzubauen, dass alles funktioniert und die Rechenleistung minimiert wird. Vielen Dank!

4 replies

null
    • Reinhard
    • yesterday
    • Reported - view

    Mein erster Ansatz zur Optimierung wäre nun, zuerst die Funktionsfelder in 'Curve Sales' durch feststehende, einmal berechnete Text und Zahlenfelder zu ersetzen. Ist das sinnvoll um die Prozesse zu beschleunigen?

    • Fred
    • 20 hrs ago
    • Reported - view

    Can you post a DB with sample data?

    So every 6 months, you import 200K records in a table that you then need to link each record? or you import new records and only those records need to be linked?

      • Reinhard
      • 12 hrs ago
      • Reported - view

       jeder neue eintrag aus curve sales, der noch keinem 'Produkte' zugewiesen wurde, soll einem zugewiesen werden. Anhand des 'Produkte' werden funktionsfelder in jedem record berechnet, da jedes Produkt einen eigenen Vertrag hat, und der gesamtbetrag eines curve eintrages normalerweise Prozentual gesplittet werden muss.

      Samples kann ich nicht öffentlich posten, hier bräuchte ich einen direkten Kontakt oder SCreenshare. Die DB ist außerdem sehr groß ich müsste hierfür erst einiges löschen, umbauen etc. wenn es wirklich hilft kann ich das machen. 

    • Fred
    • 5 hrs ago
    • Reported - view

    How many records does this code return?

    select 'Curve Sales' where Produkte = null
    

    Which table is this button located?

Content aside

  • 5 hrs agoLast active
  • 4Replies
  • 24Views
  • 2 Following