Gibt es einen Weg durch Hashes oder bitweise Operatoren oder einen anderen Algorithmus, um die Verwendung der Datenbank zu vermeiden, wenn einfach nach vorher erschienenen Zeichenfolgen oder Werten gesucht wird? Angenommen, es gibt keine Möglichkeit, den gesamten Verlauf der zuvor angezeigten Strings zu speichern, es können nur wenige Informationen gespeichert werden.Datenbank bei der Überprüfung auf vorhandene Werte vermeiden
Antwort
Sie könnten BLoom-Filter interessiert sein. Sie lassen Sie nicht autoritativ sagen: "Ja, dieser Wert ist in der Menge von Interesse", aber sie lassen Sie sagen "Ja, dieser Wert ist wahrscheinlich in der Menge" vs. "nein, dieser Wert ist definitiv nicht im Set ". Für viele Situationen reicht das aus, um nützlich zu sein.
Die Funktionsweise ist:
- Sie ein Array von Booleschen Werten erstellen (das heißt von Bits). Je größer Sie sich leisten können, dieses Array zu machen, desto besser.
- Sie erstellen eine Reihe verschiedener Hash-Funktionen, die jeweils eine Eingabezeichenfolge aufnehmen und sie einem Element des Arrays zuordnen. Sie möchten, dass diese Hash-Funktionen unabhängig sind, so dass selbst wenn eine Hash-Funktion zwei Strings demselben Element zuordnet, eine andere Hash-Funktion sie wahrscheinlich anderen Elementen zuordnen wird.
- Um aufzuzeichnen, dass eine Zeichenfolge in der Gruppe ist, wenden Sie jede Ihrer Hash-Funktionen der Reihe nach an —, geben Sie eine Reihe von Elementen im Array — und Sie setzen alle zugeordneten Elemente auf TRUE.
- Um zu überprüfen, ob eine Zeichenfolge (wahrscheinlich) in der Menge ist, tun Sie das Gleiche, außer dass Sie jetzt nur die zugeordneten Elemente überprüfen, um zu sehen, ob sie TRUE sind. Wenn alle TRUE sind, dann ist die Zeichenfolge wahrscheinlich im Satz; Ansonsten ist es definitiv nicht.
Wenn Sie in diesem Ansatz interessiert sind, sehen https://en.wikipedia.org/wiki/Bloom_filter für eine detaillierte Analyse, die Sie tune in geeigneter Weise den Filter helfen kann (die Wahl der richtigen Array-Größe und Anzahl der Hash-Funktionen) nützliche Wahrscheinlichkeiten zu erhalten.
Bloom sieht sehr vielversprechend aus, danke für den Hinweis! –
@MarkB .: Gern geschehen! – ruakh
- 1. Ressource ID # 6 bei der Überprüfung auf vorhandene Dateneingabe
- 2. Verhindern undefinierten Variablen Fehler bei der Überprüfung auf leere Variable
- 3. Aktualisierung Formular Werte nur, wenn keine Datenbank vorhandene
- 4. Problem bei der Überprüfung der TextArea-Eingabe
- 5. EF7 mit Identität auf vorhandene Datenbank
- 6. JavaScript Hinzufügen ganzzahlige Werte auf vorhandene Anzahl
- 7. Fehler bei der Überprüfung der Rails-Meldung?
- 8. JSON-Fehler bei der Überprüfung der Anweisung
- 9. Fehler bei der Überprüfung der Koordinatenwerte
- 10. Überprüfung auf doppelte Werte in einer Modellklasse
- 11. So vermeiden Sie System.Data.Entity.Infrastructure.DbUpdateException bei der Migration
- 12. Vorhandene Datenbank und Migrationen
- 13. Vermeiden Sie queryRenderedFeatures Fehler auf nicht vorhandene Ebenen
- 14. Eingabevalidierung: Überprüfung mehrerer Werte
- 15. Überprüfung der Werte für die Kombination
- 16. Formular Validierung bei der Überprüfung der Anzahl der eingegebenen Ziffern
- 17. Aktivitätskontext Nullzeigerfehler bei der Überprüfung auf Berechtigungen zur Laufzeit
- 18. Probleme bei der Überprüfung auf Duplikate in einem Vektor
- 19. JUnit-Erwartungsfehler bei Überprüfung
- 20. Näheres zur Überprüfung der Fadensicherheit bei Containerregistrierungen
- 21. Kein Repository bei der Überprüfung Eclipse-Updates
- 22. Fehler bei der Überprüfung des Passwortes
- 23. Fehler bei der Überprüfung bestimmter Codes
- 24. fill Texteingabe bei der Überprüfung jquery
- 25. Java: Vermeiden Sie die Überprüfung auf Null in geschachtelten Klassen (Deep-Null-Überprüfung)
- 26. Speicherprobleme bei der Verarbeitung großer Textmengen vermeiden
- 27. Entity Framework - Vorhandene Datenbank hinzufügen
- 28. Laravel 5.1: Migration Datenbank vorhandene
- 29. Datenbank-Design/ERD Diagramm Überprüfung
- 30. ipywidgets: flackern bei der Interaktion zu vermeiden
Welches Problem versuchen Sie zu lösen? –
Wie viele Strings haben Sie bisher gesehen? – vinit
Wie viele Strings haben Sie bisher gesehen? - 30-40 pro Tag und wächst. Es handelt sich tatsächlich um Dateinamen, die mit Hilfe von GUIDs und Zeitstempeln erstellt wurden. Daher sind sie ziemlich eindeutig voneinander, aber die Aufgabe besteht darin, die Namen der bereits zuvor angezeigten Dateinamen herauszufiltern und die neuen Dateinamen durchzulassen. –