Unser verteiltes Speicherprojekt mit LevelDB als Speicher-Engine und memcached als Cache-Layer haben wir ein Szenario: 95% Abfragen mit Schlüsseln sind nicht in der Speicher-Engine vorhanden.Speicher-Engine: wie schnell zu finden, dass der Schlüssel nicht existiert
In Memcached-Ebene, wenn den Schlüssel nicht finden kann, dann Abfrage LevelDB.
In LevelDB verwenden wir Standardbloomfilter, um herauszufinden, ob der Schlüssel existiert oder nicht, aber immer noch 1% falsch positive Rate. Wegen des 1% -Prozentsatzes müssen wir den Wert über IO anfordern, was vom Kunden nicht toleriert werden kann. (95% Schlüssel sind nicht vorhanden)
Gibt es eine bessere Lösung zu wissen, ob der Schlüssel nicht existiert?
Update: 1. Schlüssel werden jeden Tag generiert (Benutzer-ID + Datum), einmal kann nicht den Schlüssel erhalten, dann würde Client den Wert in Speicherschicht setzen. 2. Client lesen wollen Latenz (TP99) < x ms (Client ist Latenz sensitiv)
Vielleicht möchten Sie den Benutzerzugriff pro Tag aufzeichnen. Wenn ja, dann können Sie dieses Problem "Schlüssel nicht vorhanden" zu "Schlüssel vorhanden, aber Wert enthält kein angegebenes Element". –