Forum: PC-Programmierung Datensätze taggen


von Dussel (Gast)


Lesenswert?

Moin,

mein Ziel ist es, in einem Programm Datensätze zu taggen. Jeder 
Datensatz soll mehrere Tags erhalten, zum Beispiel [Ferien_2017; Photo] 
oder [Steuer_2018; Textdokument; Wichtig].

Mein Plan ist es, jedem Datensatz eine eindeutige ID zuzuordnen und für 
jedes Tag eine Tabelle mit dem zugehörigen Datensätzen anzulegen, in 
denen die IDs gespeichert sind.

Die ID würde ich als 32-Bit-Wert aus dem Nutzdateninhalt berechnen. Bei 
unter 100.000 Sätzen sollten Kollisionen unwahrscheinlich sein.

Die Fragen dazu:
Gibt es gute Standardhashfunktionen für den Fall? Man könnte eine 
kryptographische Hashfunktion benutzen und vom Ergebnis nur vier Byte 
nehmen. Allerdings sind die wohl eher darauf ausgelegt, langsam zu sein, 
um Brute-Force-Angriffe zu erschweren.

Ist das mit den Taglisten sinnvoll oder gibt es bessere Verfahren?

Sowas ist ja eigentlich in Datenbanken ein Standardproblem. Unter 
welchen Stichworten sucht man da? Beim Thema Datenbanken habe ich nicht 
viel zur konkreten Umsetzung gefunden.

von Daniel A. (daniel-a)


Lesenswert?

Bei den meisten Datenbanken wird einfach eine ID hochgezählt. Was sind 
diese Datensätze überhaupt? Sind das Dateien? Dann könnte man die inode 
nummer verwenden. Auch xattr könnten dann hilfreich sein.

von Dussel (Gast)


Lesenswert?

Daniel A. schrieb:
> Was sind diese Datensätze überhaupt?
Informationen zu Dateien.

Das Hochzählen habe ich auch gedacht. Aber durch das Hashen hat die ID 
einen Bezug zur Datei, so dass man sie auch wiederfinden kann, wenn die 
Datei verschoben wurde und man muss nicht jedes Mal erstmal nachsehen, 
ob die Nummer schon vergeben ist. (Das zweite ist nicht so ganz 
relevant.)

von JJ (Gast)


Lesenswert?

Wenn die Datensätze strukturiert sind, solltest du zusätzliche IDs 
hinzufügen (Also z.B. eine hochlaufende Nummer)
Bei dem Vorgehen von oben kannst du die Nutzdaten nicht mehr verändern 
ohne die Verknüpfung zu verlieren.
Letztlich also: ID + Liste mit möglichen Tags + Verknüpfungstabelle.

von JJ (Gast)


Lesenswert?

Wenn du eine Lösung für dich zur Anwendung suchst schau dir mal 
Tagspaces an. Eventuell ist das schon, was du suchst.


https://www.tagspaces.org/

von Dussel (Gast)


Lesenswert?

JJ schrieb:
> Bei dem Vorgehen von oben kannst du die Nutzdaten nicht mehr verändern
> ohne die Verknüpfung zu verlieren.
Wie gesagt, es geht um Dateien. Im Datensatz wird auch Name und Pfad 
gespeichert. Werden die Daten verändert (was selten passieren soll), 
kann man sie über den Pfad wiederfinden oder eben nach dem Umbenennen 
oder Verschieben über den Hash.
JJ schrieb:
> Letztlich also: ID + Liste mit möglichen Tags + Verknüpfungstabelle.
Also ist das ein brauchbares Vorgehen, wie ich es vorhabe!?
JJ schrieb:
> Wenn du eine Lösung für dich zur Anwendung suchst schau dir mal
> Tagspaces an. Eventuell ist das schon, was du suchst.
>
> https://www.tagspaces.org/
Das habe ich bei der Suche schon gefunden. Mir geht es aber um's 
Selberschreiben.

Danke für die Antworten.

Falls jemand noch eine gute schnelle Hasfunktion für lange Eingaben 
(Dateien) kennt, gerne her damit. :-)

von Egon D. (Gast)


Lesenswert?

Dussel schrieb:

> Gibt es gute Standardhashfunktionen für den Fall?

Ich verwende md5sum; allerdings codiere ich das Ergebnis
um (5bit je Stelle).

> Ist das mit den Taglisten sinnvoll

Sicher.
Das ist die Standard-Darstellung, die eine relationale
Datenbank verwenden würde.


> oder gibt es bessere Verfahren?

Naja, was heisst "besser"?

Du kannst Alias-Namen (=Hardlinks) vergeben und für jedes
Tag ein Verzeichnis machen, in das Du den Hardlink
einsortierst.

Du kannst natürlich auch -- wie Tagspace -- die Tags im
Dateinamen unterbringen; wenn Du mehrere Tags vergeben
willst, legst Du mehrere Hardlinks an.


Oder eben Mapping-Tabellen, wie von Dir vorgeschlagen.

Meine eigene Software (noch im Prototyp-Stadium) verwendet
alle drei Methoden.


> Sowas ist ja eigentlich in Datenbanken ein Standardproblem.
> Unter welchen Stichworten sucht man da?

Gar nicht. Aus der ersten Normalform folgt, dass man eine
Mapping-Tabelle mit zwei Spalten aufbaut (Datei-Hash und
Tag); wenn dieselbe Datei mehrere Tags hat, belegt sie
entsprechend mehrere Zeilen in der Tabelle.


> Beim Thema Datenbanken habe ich nicht viel zur konkreten
> Umsetzung gefunden.

Zu trivial :)

von Dussel (Gast)


Lesenswert?

Egon D. schrieb:
>> Ist das mit den Taglisten sinnvoll
>
> Sicher.
> Das ist die Standard-Darstellung, die eine relationale
> Datenbank verwenden würde.
Egon D. schrieb:
> Zu trivial :)
Ich dachte, da gäbe es vielleicht irgendwelche ausgeklügelten 
Mechanismen. Ein Suchbaum ist auch trivial. Und dann erfährt man 
irgendwas von B+-Bäumen und Rot-Schwarz-Bäumen… (nur mal als Beispiel 
für meine Überlegungen) :-)

Danke dir auch für die Antwort.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.