MongoDB mit Upserts ist großartig dafür.
Wenn Sie speichern so etwas wie:
{ "url" : "www.example.com", "pageviews" : 0 }
können Sie atomar Schritt mit Seitenaufrufe der atomaren Operation $ inc wirklich schnell:
db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}})
Wenn Sie upserts verwenden, müssen Sie sich nicht um zu prüfen, ob ein Dokument existiert, bevor es aktualisiert wird. Zum Beispiel, wenn Sie sagen:
db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true})
das Dokument mit der URL erstellt werden www.example.com, wenn sie noch nicht existiert (mit Seitenzugriffen auf 1 gesetzt) oder, wenn es nicht vorhanden ist, wird seinen Seitenzugriffe inkrementiert. Das bedeutet, dass Sie sich nicht darum kümmern müssen, die Sammlung vorab zu füllen.
Hände runter würde ich sagen Redis. Ich mache ein Gegenstück und dränge 30k Befehle pro Minute auf einem $ 20 512MB VPS. :) –
Wir haben versucht, Redis für ein Zähler-System zu verwenden. Redis 'primärer Datenspeicher ist RAM, und unser Dataset war einfach zu groß, um effektiv zu sein.Etwas mehr wie Tokyo Tyrant - die nicht immer den gesamten Datensatz in Ram speichern muss - wäre wahrscheinlich eine bessere Wahl gewesen. –
Ein einfacher Zähler kann nicht im RAM gehalten werden? Twitter speichert fast alle aktiven Tweets im Speicher. Wenn Sie Leistung wollen, sollten Sie ein wenig Geld für ein Speichermodul bezahlen. Nebenbei könnt ihr ein paar Gigs von Ram günstig bekommen. – Alfred