Autor Thema: Löschen aus Ansicht dauert sehr lange  (Gelesen 12114 mal)

Offline pl001

  • Aktives Mitglied
  • ***
  • Beiträge: 170
Löschen aus Ansicht dauert sehr lange
« am: 09.02.11 - 11:44:36 »
Hallo,

ich muss alle Dokumente (inkl. Änderungen und Löschung) aus einer Ansicht in eine andere Datenbank kopieren. Hierzu verwende ich folgendes Script als Agent:

Code
Sub Initialize
	Dim session As New NotesSession
	Dim sourcedb As NotesDatabase
	Dim targetdb As NotesDatabase
	Dim sourceview As notesview
	Dim targetview As notesview
	Dim dc As NotesDocumentCollection
	Dim vc As NotesViewEntryCollection
	Dim doc As NotesDocument
	
	Set sourcedb = New NotesDatabase("SERVER","database.nsf")
	Set targetdb = session.CurrentDatabase
	
	
	Set sourceview = sourcedb.GetView("People")
	Set targetview = targetdb.GetView("all")
	Set vc = targetview.AllEntries
	Call vc.RemoveAll(True)
	
	
	Set doc = sourceview.GetFirstDocument
	
	While Not(doc Is Nothing)
		Call doc.CopyToDatabase(targetdb)
		Set doc = sourceview.GetNextDocument(doc)
	Wend
End Sub

Es werde also erst alle Dokumente der Ansicht "all" aus der Ziel-DB gelöscht und anschließend werden alle Dokumente der Ansicht "People" von der Quell-DB zur Ziel-DB kopiert. Es handelt sich dabei aktuell um ca. 1500 Dokumente, aber der Agent benötigt hierfür ca. 3 Minuten. Das Problem ist hierbei offensichtlich das Löschen, denn wenn ich dies zuvor manuell mache und dann den Agent starte benötigt er nur noch 15 Sekunden.

Wie kann ich das Löschen beschleunigen?

Gruß
Peter

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #1 am: 09.02.11 - 11:49:16 »
Wenn du was aus nem View löschst, wird der im Allgemeinen wieder aktualisiert. An welcher Stelle brauch der Debugger lange?

Offline pl001

  • Aktives Mitglied
  • ***
  • Beiträge: 170
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #2 am: 09.02.11 - 11:52:24 »
Zitat
Wenn du was aus nem View löschst, wird der im Allgemeinen wieder aktualisiert.

Das in der View alle Dokumente angezeigt werden, wäre es natürlich auch möglich einfach alle Dokumente in der DB zu löschen. Wäre das möglich und sinnvoll?

Zitat
An welcher Stelle brauch der Debugger lange?

Sorry, aber wo kann ich das sehen. Habe leider nicht viel Erfahrungen mit Notes-Programmierung.


Gruß
Peter

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #3 am: 09.02.11 - 11:54:38 »
Hallo,m

Aber Du kannst doch Dein Script im Debugger laufenlassen, oder an geeigneten Stellen
Print-Befehle einbauen.


Andreas

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #4 am: 09.02.11 - 11:55:59 »
Das in der View alle Dokumente angezeigt werden, wäre es natürlich auch möglich einfach alle Dokumente in der DB zu löschen. Wäre das möglich und sinnvoll?
??? Kapier ich nicht

Zitat
Sorry, aber wo kann ich das sehen. Habe leider nicht viel Erfahrungen mit Notes-Programmierung.
Werkzeuge -> Debug LotusScript

Offline pl001

  • Aktives Mitglied
  • ***
  • Beiträge: 170
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #5 am: 09.02.11 - 12:05:09 »
Also ich habe jetzt mal einen Print-Befehl eingebaut und konnte so sehen, dass fast die gesamte Zeit für folgenden Befehl benötigt wird.

Code
Call vc.RemoveAll(True)

Gruß
Peter

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #6 am: 09.02.11 - 12:11:08 »
Ok.
Damit bist Du also in Deiner Vermutung bestaetigt worden, dass das Loeschen der Dokumente die Bremse fuer Dein Script ist.

Warum loescht Du die Dokumente eigentlich?


Andreas

Offline pl001

  • Aktives Mitglied
  • ***
  • Beiträge: 170
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #7 am: 09.02.11 - 12:14:20 »
Ich habe zwei Datenbanken die keine Repliken sind und die Ziel-DB soll den gleichen Inhalt wie eine Ansicht der Quell-DB haben. Es sollen also alle neuen, geänderten und gelöschten Dokumente übertragen werden und das Ganze natürlich nicht als Replikation.

Ach ja, in diesem Zusammenhang gleich noch eine Frage. Wenn Dokumente mittels CopyToDatabase in eine DB-Replik kopiert werden, gibt es dann Probleme bei der eigentlichen Replikation. Führt dies also zu einem Replizierkonflikt oder ist ein solches Dokument dann doppelt vorhanden?

Gruß
Jochen

Offline Bastel123

  • Senior Mitglied
  • ****
  • Beiträge: 355
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #8 am: 09.02.11 - 13:38:55 »
Ich verstehe nicht warum man Dokumente in eine Datenbank kopiert, die sowieso repliziert.

Aber sei's drum.

Normalerweise wird bei copytodatabase keine neue UNID vergeben. Es sei denn der Parameter

CopyToDatabase_New_UNID = 1

ist gesetzt. Dann wird immer eine neue UNID erzeugt und man muss eventuelle Antworten mitziehen.


Wenn ein Dokument mit der UNID schon vorhanden ist wird bei einem neuen Kopieren ein weiteres Dokument mit einer neuen UNID angelegt.

HTH

Sebastian 
Gruß Sebastian
-----------------------------------------------------
Kaum macht man's richtig, schon funktioniert's.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #9 am: 09.02.11 - 14:05:09 »
@Bastel123
Es sind doch keine Repliken, wie der Fragesteller auch geschrieben hat.
Zitat
Ich habe zwei Datenbanken die keine Repliken sind und die Ziel-DB soll den gleichen Inhalt wie eine Ansicht der Quell-DB haben. Es sollen also alle neuen, geänderten und gelöschten Dokumente übertragen werden und das Ganze natürlich nicht als Replikation.

@pl001
Meine Frage mit dem Loeschen zielte eigentlich darauf hin ab, warum laesst Du, wenn es denn sein muss, dei Dokumente nicht zu einem spaeteren Zeitpunkt automatisch durch einen zweiten kleinen Agenten loeschen.

In Deinem jetzigen Script muesstest Du die zu loeschenden Dokumente einfach nur durch ein spezielles Flag kennzeichnen.
Natuerlich muesstest Du dann auch noch dir Ansicht anpassen, damit dei Dokumente mit dem gesetzten Loeschflag nicht mit angezeigt werden.


Andreas

Glombi

  • Gast
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #10 am: 09.02.11 - 14:07:51 »
Ach ja, in diesem Zusammenhang gleich noch eine Frage. Wenn Dokumente mittels CopyToDatabase in eine DB-Replik kopiert werden, gibt es dann Probleme bei der eigentlichen Replikation. Führt dies also zu einem Replizierkonflikt oder ist ein solches Dokument dann doppelt vorhanden?
Ist eine DB-Replik keine Replik?

Offline pl001

  • Aktives Mitglied
  • ***
  • Beiträge: 170
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #11 am: 09.02.11 - 14:18:09 »
Eigentlich geht es um folgende Anforderung.

Aus unserem Domino-Verzeichnis sollen alle Personendokumente in anderes und bereits bestehendes Adressbuch (keine Replik vom Verzeichnis) übertragen werden. Dieses soll immer die gleichen Personendokumente beinhalten wie das Verzeichnis. Es müssen also neue Einträge, Änderungen und Löschungen übertragen werden. Das zweite Adressbuch wird dann wiederrum per Replik an viele andere Standorte verteilt.

Genau genommen benötige ich also eine One-Way-Synchronisation. Nun dachte ich, dass man die Dokumente einfach mittels CopyToDatabase() kopieren kann, denn so soll sich die ID ja nicht ändern. Aber ich musste eben schon feststellen, dass dennoch alle so erzeugten Dokumente wird neu zu den anderen Standorten repliziert werden.

Gruß
Peter

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #12 am: 09.02.11 - 14:26:21 »
Was Du da baust, ist m.E. strukturell das Schlimmste, was man in Notes machen kann.

1500 Dokumente periodisch in einer Datenbank löschen und dann die (fast) gleichen wieder hineinkopieren. Anschließend dann die Zieldatenbank per Replikation an andere Standorte verteilen.

Du produzierst damit u.a. einen enormen unnötigen Replikationsverkehr.

Baue einen Agenten, der einen sauberen Abgleich der Datenbanken durchführt.

Neue Dokumente hinzufügen
Gelöschte Dokumente entfernen
Geänderte Dokumente ändern
Nicht geänderte Dokumente IN RUHE LASSEN

Für alles andere verbietet mir die Höflichkeit die korrekte Bezeichnung.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #13 am: 09.02.11 - 14:31:05 »
Nun dachte ich, dass man die Dokumente einfach mittels CopyToDatabase() kopieren kann, denn so soll sich die ID ja nicht ändern. Aber ich musste eben schon feststellen, dass dennoch alle so erzeugten Dokumente wird neu zu den anderen Standorten repliziert werden.

Peters Worten ist nichts hinzufügen.

Eine Erläuterung aber noch zur DocumentUniversalID: Bei CopyToDatabase bleibt diese erhalten - wenn es noch kein Dokument mit dieser UNID gibt. Und das ist in Deinem Fall ja nicht gegeben - der Deletion Stub des gerade gelöschten Dokuments hat ja schon diese UNID (sonst können Löschungen nicht repliziert werden).

Bernhard

Offline pl001

  • Aktives Mitglied
  • ***
  • Beiträge: 170
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #14 am: 09.02.11 - 14:32:15 »
Mir ist natürlich klar, dass die von Dir vorgeschlagene Lösung deutlich besser ist, nur leider fehlen mir die notwendigen Kenntnisse um so etwas umzusetzen. Das Script was ich hier gepostet habe wurde auch nur mit Mühe und Not mittels Copy&Paste zusammengestellt.

Gruß
Peter

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #15 am: 09.02.11 - 14:38:52 »
Das verstehe ich nur zu gut, aber es ändert nichts an dem Unheil, das Du mit der Aktion anrichtest. Das fällt Dir irgendwann richtig auf die Füße. Sicher gibt es irgendwelche Abgleich-Tools käuflich oder als Freeware, oder Du läßt Dir so einen Agenten bauen. Es wird auf jeden Fall billiger, als das so umzusetzen, wie Du es geplant hast.

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #16 am: 09.02.11 - 14:55:57 »
Freeware ... Hat mich da jemand gerufen ? http://www.eknori.de/2005-09-03/adressbucher-konsolidieren/

Ist zwar noch aus 4.x Zeiten, funktioniert aber bestens. Man muss auch nichts programmieren, sondern nur konfigurieren.
Und OpenNTF hat sicherlich auch noch was auf der Pfanne. ( Data Moving Animal )
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline pl001

  • Aktives Mitglied
  • ***
  • Beiträge: 170
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #17 am: 09.02.11 - 15:03:22 »
@eknori

Vielen Dank für den Tipp, aber mit welcher Version wurde die DB erstellt? Bei kommt "Ungültige  NSF-Version".

Gruß
Peter

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #18 am: 09.02.11 - 15:10:33 »
war OD 43. Hier noch einmal als ODS 20
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline WernerMo

  • @Notes Preisträger
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.050
  • Geschlecht: Männlich
Re: Löschen aus Ansicht dauert sehr lange
« Antwort #19 am: 09.02.11 - 15:31:41 »
Hallo Ulrich

/Offtopic on

... Hier noch einmal als ODS 20...

ODS 20 war das nicht V4?
Inzwischen glaube ich, dass Du jede Version aktiv hast?

/Offtopic off

Gruß aus Nürnberg
Werner
Gruß Werner
  o                                                  o   
 /@\  Nächster @Notes-Stammtisch  /@\  online Sept. 2020?
_/_\__________________________/_\_ Details folgen.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz