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.
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.
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.)
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.
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/
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. :-)
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.