Sortierung umschalten

  • Hi


    ich möchte eine Notes Datenbank mit einer MySQL Tabelle abgleichen. Dazu habe ich mir jetzt einen Agenten geschrieben der schön nach alter Schule beide DB öffnen, nach Schlüssel sortiert und dann Schritt für Schritt vergleicht und Dokumente austauscht. Dummerweise ist der Schlüssel Alphanumerisch und muss es auch sein. Er enthält zum Teil Punkt (.) und da wirds dann richtig doof da die Sortierung unterschiedlich erfolgt.


    Ein Beispiel:


    MySQL


    00123
    03456
    1.12
    1.44
    10201
    2.11
    2673809


    Notes


    00123
    03456
    10201


    1.12
    1.44
    2673809



    2.11



    Kann man die Sortierung irgendwie umstellen?

  • Ich würde hier -nicht nur der Performance halber- mit Listen arbeiten. Dann musst Du nicht Schritt für Schritt durchgehen...


    also:

  • Ich muss aber dann auch eventuell Updates auf die Dokumente fahren (oder löschen), brauche die also im Zugriff.



    Also im Prinzip ist die MySQL Tabelle die Master Tabelle und soll Updates in die Notes DB schreiben. Aber halt NUR Updates weil die Notes DB wird dann über VPN Anbindungen (Teils auf dem Land mit DSL Lite) repliziert.


    Bin auch gerne für andere Vorschläge offen.

  • Deshalb mein Vorschlag Dir eine Liste mit UNIDs zu merken, dann kannst Du über

    Code
    db.GetDocumentByUNID(strNotes( deinSchlüssel ))


    das Dokument holen.


    Vorteil: Die Schlüssel hast Du Dir Ruck- Zuck über eine Ansicht mit ViewEntries gezogen (geht über den View- Index in Sekunden, fast egal wie viele Dokumente Du hast),
    und öffnen musst Du nur die Dokumente, die tatsächlich zu aktualisieren sind...


    Oder Du machst sowas:

    Code
    Dim docNotes List as NotesDocument
    While .... <<< Hier Dokumente durchlaufen
        set docNotes( deinSchlüssel ) = doc
    Wend


    das fällt aber auf die Schnauze, wenn Du zu viele Dokumente verarbeiten willst (also GrössenOrdnung 10.000 und mehr)...


    Vergiss die Sache mit dem Sortierung anpassen... Es kann sein, dass sich das mit der nächsten Notes- Version wieder ändert, und plötzlich wird der Punkt wieder vor den Zahlen einsortiert... Hatten wir alles schon ! Das ist zu unsicher!!!!

  • Danke, das zweitere sieht so aus als könnte es funktionieren. Ich weiss halt erst ob ich das Dokument ändern muss wenn ich die Felder verglichen habe.
    Wie schnell ist denn so ein

    Code
    db.GetDocumentByUNID(strNotes( deinSchlüssel ))


    Mein erster Versuch war jeweils über eine Suche zu arbeiten, also Satz aus MySQL DB Lesen und dann mit nem db.search nach dem Schlüssel zu suchen- Das war dann natürlich jenseits von Gut und Böse, da konnte man zuschauen wie er die Dokumente einsortiert hat.



    Werde Morgen mal die beiden Sachen probieren.





    VIELEN DANK!

  • Es gibt -imho- keine schnellere Methode um ein NotesDocument zu bekommen als ein GetDocumentByUNID, weil hier interne Tables verwenden werden... Wenn Du Dir vorher die Liste baust (wie gesagt: Mit einer richtig aufgebauten Ansicht innerhalb von Sekunden), dann ist das Finden des Dokuments ein Klacks.


    TIPP: Für solche Operationen (Vergleich von zwei Listen) ist es optimal, wenn man entweder ein Datum hat, das man vergleichen kann (Hast Du ein Änderungsdatum im Satz der SQL- Datenbank ?) oder wenn man einen Hash bilden kann.
    Das könnte dann so aussehen in der zweiten Spalte der Ansicht, die Du verwendest für den Aufbau der Liste:


    Code
    _relevanteInfos := @Implode( Feld1 : Feld2 : Feld3 : ..... : FeldX ; "," );
    @Text( @DocumentUniqueID ) + "~" + @Password( _relevanteInfos )


    Dann musst Du im SQL nur eine Spalte zurückliefern, die alle relevanten Felder mit Komma getrennt zurückliefert, kannst dann im Script per Evaluate da nen Hash per password drüber bilden und so sauschnell prüfen, ob sich was geändert hat....
    Da gabs auch mal nen Beitrag zu auf einem DeveloperCamp...