Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Doppelte Datei finden in Ordner/Platte etc.
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #11
Doppelte Datei finden in Ordner/Platte etc.
Nett, aber an sich nicht was ich gesucht habe, möchte ja zwei Datenbanken vergleichen, nicht eine innerhalb sich selber.

Bin bei meinem eigenen Entwurf aber auch nicht weiter. Bin am überlegen ob ich Dateisystem durchlaufen soll und das in neue DB schreiben (sonst bleiben gelöschte Dateien erhalten), oder ob ich die DB durchlaufen soll, dann ist die Frage aber wie ich neue Dateien hinzufüge.
03.09.2010 19:13
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chiaki Offline
Die Pommesfee

Beiträge: 12.554
Registriert seit: Jul 2008
Beitrag #12
Doppelte Datei finden in Ordner/Platte etc.
zwei zu vergleichen is kein problem
muss nur dad doppeltedatei abfragescript veraendern werden
machste nen kreuzprodukt und dann zaehlste welcher hash mehr als 1x vorkommt und joinst das mit den kreuzprodukt
03.09.2010 20:28
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
klemmi Offline
Erfahrener Benutzer

Beiträge: 901
Registriert seit: Jul 2008
Beitrag #13
Doppelte Datei finden in Ordner/Platte etc.
chiaki schrieb:  machste nen kreuzprodukt und dann zaehlste welcher hash mehr als 1x vorkommt und joinst das mit den kreuzprodukt

Klingt mir ziemlich rechenaufwendig - also bei ein paar hundert Dateien ist das ja okay, aber wenn man mal 100000 Dateien vergleichen will...

03.09.2010 20:58
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chiaki Offline
Die Pommesfee

Beiträge: 12.554
Registriert seit: Jul 2008
Beitrag #14
Doppelte Datei finden in Ordner/Platte etc.
geht bestimmt auch besser :)
aber heutzutage ist das selbst mit 100.000 datensätze garnich mal son problem
03.09.2010 22:05
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #15
Doppelte Datei finden in Ordner/Platte etc.
Was verstehst du unter Kreuzprodukt bei SQL? Kenn' bisher erst die Grundsytax von SQL, frage daher einfach mal Blöd.

Im überigen, Crosszitat ausm UIT:
oreissig schrieb:  
gandro schrieb:  An sich stellt sich die Frage ob man ne gewöhnliche Tabelle macht (aka. SQLite oder son Krams) oder mit nem Binärbaum arbeitet (was für die Abfrage ob ein Hash bereits existiert schnell wie Pommes ist, für Abfrage ob Dateipfad schon existiert hingegen weniger).
die datenbank wird die tabelle ja wohl auch kaum als verkettete liste abspeichern
SQLite speichert Tabellen intern durchaus als Binärbaum. Dooferweise aber nur mit nem 64bit-Key, wo SHA1 türlich nicht reinpasst. Andererseits, wenn ich den Hash als INTEGER PRIMARY KEY nehme, dann hab ich Probleme mit doppelten Dateien in der gleichen Tabelle. Irgendwie doof.

Problem für mich ist auch, dass ich gerne eine Datei pro Datenbaum habe. Aber so wie es ausschaut kann SQLite nur jeweils mit einer Datenbankdatei mit mehreren Tabellen arbeiten, und nicht mit zwei Datenbankdateien. K, geht doch.
05.09.2010 14:07
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #16
Doppelte Datei finden in Ordner/Platte etc.
Ich pushe das hier mal, weil bin mir echt nicht sicher wie ich das aktuelle Problem lösen soll.

Ausgangslage: Es existiere eine befüllte Tabelle, mit den Spalten filename, size, mtime, sha1sum. Nun wird der Dateibaum durchgegangen, und für jede Datei überprüft ob sich size oder mtime im Dateisystem verändert haben, falls ja, wird die sha1-Summe neu berechnet (erst nach dem SELECT mtime, size FROM tabelle WHERE filename=$dateiname Query also) und zusammen mit den neuen size und mtime-Werten in die Tabelle geschrieben.

Frage ist nun, was ist mit sqlite3 effizienter:

1. Alle überprüften Zeilen irgendwie zu markieren und am Ende alle nicht-überprüften Zeilen zu löschen, weil die dazugehörigen Dateien offenbar gelöscht wurden.

2. Alle überprüften Zeilen in eine neue Tabelle schreiben, und am Ende die alte Tabelle löschen.
05.09.2010 21:02
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 12.021
Registriert seit: Jul 2008
Beitrag #17
Doppelte Datei finden in Ordner/Platte etc.
kommt vll auch drauf an, wieviel änderungen du jeweils durchführst. beim löschen muss er die tupel wohl erst nochmal finden, weswegen bei der ersten variante die performance wohl mit der anzahl der veränderungen abnimmt, während die 2. variante allein durch die anzahl der dateien skaliert.

EDIT: und letztere ist natürlich größer
(Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2010 22:02 von oreissig.)
05.09.2010 21:40
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.951
Registriert seit: Jul 2008
Beitrag #18
Doppelte Datei finden in Ordner/Platte etc.
Kann man bei SQL(ite) JOINs/SELECTs als neue Tabellen speichern?

Hatte heute Mittag noch folgende Idee: Die ID aller betrachteten Dateien wird in eine Tabelle im RAM geschrieben, am Ende wird ein JOIN oder so gemacht, und das dann gespeichert.

Nachtrag: SQL-92 kennt SELECT INTO. SQLite kennt INSERT INTO bzw CREATE TABLE AS SELECT. Müsste damit gehen.
06.09.2010 18:24
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste