Autor Thema: Suche von Dokumenten in Zeiträumen in Java (performant)  (Gelesen 2690 mal)

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Hallo zusammen,

ich habe folgende Aufgabenstellung.

Ich muss aus einer kategorisierten Ansicht ( Kategorie = kanon. Raumnamen ), Reservierungen aus einem Zeitraum A bis B auslesen.

Ein DBSearch scheidet aus, ist zu langsam.

Ich durchlaufe mittlerweile mit folgenden Java-Code die Kategorien, aber es ist aber immer noch zu langsam.
Inkl.Verarbeitung und Darstellung im Applet schaffe ich 30.000 Datensätze aus 40 Kategorien in 90 sek.

Aber das geht aber noch schneller ... sicherlich, oder ?


Die Ansicht sieht ungefähr so aus

Raumname      | Spalte 2     |    Startdatum               |    ....
______________________________________________
Raum 1
                    |    Daten 1   | 01.01.2010 09:00: 00 | ....
                    |    Daten 2   | 31.01.2010 09:00: 00 | ....
.
.
Raum 2  
                    |    Daten 3   | 01.05.2009 09:00: 00 | ....
                    |    Daten 4   | 31.12.2009 09:00: 00 | ....
          
    
Der Codeauschnitt ist folgender ...

ViewNavigator viwNav = viewLookUp.createViewNavFromCategory(strKey);

if ( viwNav.getCount() > 0 ) {
   ViewEntry tmpentry;
   ViewEntry ve2Load = viwNav.getFirst();

   while ( ve2Load != null ) {
      if ( ve2Load.isValid() && ve2Load.isDocument() ) {
         totals++;
         values = ve2Load.getColumnValues();

         if ( values.elementAt(2) != null ) {
            Date startTest = ((DateTime)(values.elementAt(2))).toJavaDate();
            if ( startTest.after(endDate) ) break;  // nix wie raus, wir sind vom Datum her schon drüber
            if ( startTest.after(startDate) ) {
               String status = (String)values.elementAt(7);

               ... hier kommt die Verarbeitung der Treffer

            }
         }
      }
      tmpentry = viwNav.getNext();
      ve2Load.recycle();
      ve2Load = tmpentry;
   }

}
viwNav.recycle()



... hat irgendjemand ein paar Performance-Tips dazu ...

Ich dachte so in Richtung binärer Suche, da die Ergebnisse ja nach Startdatum sortiert ist.
Aber da ich ja keine richtigen Treffer habe, tue ich mich ein wenig schwer. Eine Rekursion wie bei der binären Suche wäre ideal.
So habe ich die wenigstens Anzahl Durchläufe bis ich den linken und rechten Rand gefunden habe.

Marco Weller
« Letzte Änderung: 01.10.10 - 16:36:17 von ghostmw »
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Suche von Dokumenten in Zeiträumen in Java (performant)
« Antwort #1 am: 05.10.10 - 16:28:58 »
Ich würde ja nicht über die View gehen, sondern eine NotesDatabase.Search() absetzten. Dort die form, Kategorie und Anfangs- bzw. Endzeit angeben und es sollte passen.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Suche von Dokumenten in Zeiträumen in Java (performant)
« Antwort #2 am: 05.10.10 - 16:40:55 »
@m3: Würde ich auch so machen.

Und evtl. könnte man sich überlegen diese Suche auf den Server zu verlagern, dass das arme Applet nicht die ganze Logik etc. machen muss und die Daten übers Netz schrubben muss.
Aus genau diesem Grund (Applets) ist Java bei Noteslern so in Verruf gekommen.
Mach ein Servlet oder einen Java-Agent auf dem Server der Dir XML zurückliefert und das verarbeitet Dein Applet dann.

Das wäre ein sauberer Ansatz.

Grüße David
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Suche von Dokumenten in Zeiträumen in Java (performant)
« Antwort #3 am: 06.10.10 - 08:04:06 »
danke an alle ... wow, das ging ja richtig flott.  :D

Das mit dem db.search hatten wir auch schon im Einsatz, war aber bei ca. 50.000 Datensätzen so bock lahm, dass wir uns nach was Performanterem umgesehen haben.

Da sind wir auf die Idee mit der NiewNavigator gekommen und siehe da es ging deutlich schneller.

Jetzt ist nur noch die Sache mit dem Navigieren und Auffinden vom 1. und letzten Eintrag innerhalb der Kategorie im entsprechenden Zeitraum, wenn wir das haben, wird's noch richtig performant.

Das mit dem XML ist auch ein guter Ansatz, habe zwar noch nicht ganz verstanden, wie das gehen soll, bin aber gern über jede Hilfe dankbar. Ich habe da Bedenken wegen der Datenmenge, die per XML dann transferiert wird. Gibts da eine Grenze (z.B. 10 MB oder so) ?

Im aktuellen Fall haben wir 30 Räume (= Kategorien in der Ansicht und einen Zeitraum von heute bis in einem halben Jahr).

Datensätze sind vom 1.1.2008 bis 31.12.2012 enthalten.

D.h. den ganzen Overhead beim Suchen entsteht vorne am Beginn der Daten, also am 1.1.2008 bis zum heutigen Datum, und das wollte ich abkürzen (mittels binärer Suche).

M. Weller
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Suche von Dokumenten in Zeiträumen in Java (performant)
« Antwort #4 am: 06.10.10 - 08:32:13 »
XML, Stichwort WebService, muss aber ja nicht zwingend SOAP sein, kann auch ein eigenes definiertes Format sein.
Bzgl. Datenmenge: Irgendwie muss er die anzuzeigenden Daten ja immer übers Netz schaufeln!?!

David
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Suche von Dokumenten in Zeiträumen in Java (performant)
« Antwort #5 am: 06.10.10 - 08:35:24 »
danke an alle ... wow, das ging ja richtig flott.  :D

Das mit dem db.search hatten wir auch schon im Einsatz, war aber bei ca. 50.000 Datensätzen so bock lahm, dass wir uns nach was Performanterem umgesehen haben.
FT-Index auf der Datenbank?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Suche von Dokumenten in Zeiträumen in Java (performant)
« Antwort #6 am: 06.10.10 - 08:42:13 »
Meine Leseempfehlung zum Thema "Performance" wäre Andre Guirards Postings zum Thema Performance.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Suche von Dokumenten in Zeiträumen in Java (performant)
« Antwort #7 am: 06.10.10 - 08:51:57 »
... FT - jupp ist drauf.

Finde es aber trotzdem schneller, meiner Meinung und meinem Empfinden nach.

Vielleicht habe ich auch was übersehen, Entwickler haben die Angewohnheit manche Dinge zu übersehen im Eifer des Gefechts.

Marco Weller
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz