2017-07-27 5 views
1

Ich suche eine Methode/Datenstruktur um ein Auswertesystem für einen binären Matcher für eine Verifikation zu implementieren.CSV Tabelle in Redis Datenstrukturen umwandeln

Dieses System wird auf mehrere PCs verteilt.

Grundidee ist an vielen Orten über das Internet beschrieben, zum Beispiel in diesem Dokument: https://precisebiometrics.com/wp-content/uploads/2014/11/White-Paper-Understanding-Biometric-Performance-Evaluation.pdf

Diese Matcher, dass ich mich entschieden, zwei Datenelemente als Eingabe verwendet und berechnet eine Abgleichswert, die ihr widerspiegelt Ähnlichkeit (dann wird eine Schwelle gewählt, abhängig von falscher Übereinstimmung/falscher Nicht-Übereinstimmungsrate).

Derzeit speichere ich Partituren zusammen mit Etiketten in CSV-Datei übereinstimmt, wie folgt vor:

label1, label2, genuine, 0.1 
label1, label4, genuine, 0.2 
... 
label_2, label_n+1, impostor, 0.8 
label_2, label_n+3, impostor, 0.9 
... 
label_m, label_m+k, genuine, 0.3 
... 

(ich eine markierte Datenbank haben)

Dann laufe ich ein Python-Skript, dass diese Lasten Tabelle in Pandas DataFrame und berechnet die FMR/FNMR-Kurve, ähnlich der in Abbildung 2 im obigen Link gezeigten Kurve. Die Verarbeitung ist ziemlich einfach, man sortiert einfach den Datenrahmen, scannt Zeilen von oben nach unten und berechnet die Anzahl der Betrüger/Experten in Zeilen über und unter jeder Zeile.

Das System sollte auch das Auffinden von Ausreißern unterstützen, um die Verbesserung des Matching-Algorithmus zu unterstützen (Labels von Datenelementpaaren, abnormal große echte Scores oder ungewöhnlich kleine Impostor-Scores). Dies ist auch ziemlich einfach mit den DataFrames (sortiere und sortiere Kopfzeilen).

Jetzt denke ich darüber nach, wie die Vergleichsdaten im RAM statt CSV-Dateien auf der Festplatte gespeichert werden.

Ich denke Redis in dieser Hinsicht: Datenmenge ist groß, und mehrere PCs sind in Berechnungen beteiligt, und Redis verfügt über eine Master-Slave-Funktion, die es ermöglicht, Daten schnell über das Netzwerk zu synchronisieren, so dass mehrere PCs genau haben Klone von Daten. Es ist auch kostenlos.

Allerdings scheint Redis nicht sehr gut für die Speicherung solcher Tabellendaten zu passen.

Daher muss ich Datenstrukturen und Algorithmen für ihre Verarbeitung ändern. Es ist jedoch nicht offensichtlich für mich, wie diese Tabelle in Redis-Datenstrukturen übersetzt werden kann.

Eine andere Option wäre die Verwendung eines anderen Datenspeichersystems anstelle von Redis. Ich kenne solche Systeme jedoch nicht und bin dankbar für Vorschläge.

+1

Sie könnten ein 'DefaultDict' aus [redis-collections] (http://redis-collections.readthedocs.io/en/stable/api.html#redis_collections.dicts.DefaultDict) verwenden - jeder Schlüssel könnte eine Liste speichern von Werten. – bbayles

Antwort

1

Sie müssen mehr über Redis lernen, um Ihre Herausforderungen zu lösen. Ich empfehle dir, https://try.redis.io einen Versuch zu geben und dann über deine Fragen nachzudenken.

TL; DR - Redis ist kein "Tabular Data" Speicher, es ist ein Speicher für Datenstrukturen. Es liegt an Ihnen, die Datenstruktur (en) zu verwenden, die am besten für Ihre Anfrage (n) geeignet sind.

IMO was Sie tun möchten, ist eigentlich die großen Daten (wie groß ist es sowieso?) Auf langsameren Speicher und speichern Sie das Modell (FMR-Kurve Berechnungen? Ausreißer?) In Redis. Dies kann fast sicher mit den vorhandenen Kerndatenstrukturen (in diesem Fall wahrscheinlich Hashes und Sorted Sets) geschehen, aber vielleicht noch optimaler mit der neuen Modul-API.Siehe das redis-ml Modul als ein Beispiel für das Servieren von Maschinenlernmodellen aus Redis (und vielleicht wäre Ihr Anwendungsfall eine schöne Ergänzung dazu;))

Haftungsausschluss: Ich arbeite bei Redis Labs, der Heimat der Open Source Redis und Provider von kommerziellen Lösungen, die darauf aufbauen, einschließlich des oben erwähnten Moduls (Open Source, AGPL lizensiert).