2013-03-18 6 views
5

Wir betreiben mongodb-Instanz, um Daten in einer Sammlung zu speichern, keine Probleme damit und mongo ist unser Hauptdatenspeicher.Nutzen Sie Hazelcast anstelle von MongoDB zum Speichern von Benutzersitzungen/Schlüsseln?

Heute werden wir die Oauth2-Unterstützung für das Produkt entwickeln und die Benutzersitzungen (Sicherheitsschlüssel, Zugriffstoken usw.) speichern und das Zugriffstoken erst nach dem definierten Authentifizierungsserver validieren Timeout, damit nicht jede Anfrage auf die Validierung durch den Authentifizierungsserver wartet. Die erste Anforderung für eine gesicherte Ressource (create) muss immer gegen den Authentifizierungsserver authentifiziert werden. Jede weitere Anfrage wird intern validiert (Cache) und das interne Timeout überprüft. Erst wenn sie abgelaufen ist, wird eine weitere Anfrage an den Authentifizierungsserver ausgegeben.

Um diese Anforderungen zu lösen, müssen wir eine Art von verteilten Cache einführen, um (mit TTL-Unterstützung) die Benutzersitzungen usw. zu speichern, verfallen sie basierend auf einem TTL .. .i schrieb darüber oben.

zwei Möglichkeiten:

  1. speichern Benutzersitzung im Hazelcast und stelle sie in allen App-Server - gute Wahl, alle Benutzersitzung in Räumung Karte weiter besteht.
  2. Benutzer Sitzungen in MongoDb speichern - und das Gleiche tun.

Haben Sie keine Vorteile sehen Hazelcast zu verwenden, anstatt die temporären Daten innerhalb Mongo zu speichern? Irgendwelche signifikanten Leistungsverbesserungen, die Ihnen bekannt sind?

Ich bin neu in Hazelcast, also nicht über alle Killer-Funktionen bewusst sein.

+0

Nicht sicher Hazelcast, aber haben Sie überprüft, Couchbase? Seine Enterprise-Klasse Memcached kompatible Implementierung. Seine Leistung ist viel besser als MongoDB und Cassandra. Sehen Sie es hier: http://www.couchbase.com/couchbase-server/why-couchbase – user1697575

Antwort

16

Disclaimer: Ich bin der Gründer von Hazelcast ...

  1. Hazelcast ist viel einfacher und Einfachheit eine Menge Fragen. Sie können Hazelcast in Ihre Anwendung einbetten (wenn Ihre Anwendung in Java geschrieben ist). Keine Notwendigkeit, Remote-Nosql Cluster bereitzustellen und zu verwalten.
  2. Hazelcast funktioniert direkt mit Ihren Anwendungsobjekten. No JSON oder ein anderes Format. Schreibe und lese Java-Objekte.
  3. Sie können Java-Code auf Ihren In-Memory-Daten ausführen. Keine Notwendigkeit zu holen und Prozessdaten; Senden Sie Ihren Code an die Daten.
  4. Sie können für die Updates auf Ihre Daten hören. "Benachrichtigen Sie mich, wenn diese Karte oder dieser Schlüssel aktualisiert ist".
  5. Hazelcast hat einen reichen Satz von Datenstrukturen wie Warteschlange, Thema, Semaphore, Sperren, Multimap usw.Stellen Sie sich eine Warteschlange über mehrere Knoten teilen und in der Lage blockiert Queue-Abfrage zu tun/nehmen Betrieb ... das ist wirklich cool :)
+2

Danke, das wollte ich hören :) Überzeugt mich. – IgorA

+0

Bitte stellen Sie sicher, dass Sie Ihre Zugehörigkeit offenlegen, wenn Sie Ihr Produkt in Zukunft anschließen. Weitere Informationen finden Sie unter http://stackoverflow.com/help/promotion. – Matt

+0

Ich interessiere mich für Feature # 3. Könnte jemand einen Link zu einem guten Tutorial geben, das zeigt, wie man das Objekt im Speicher verwendet? –

2

Hazelcast ist ein In-Memory-Grid, daher sollte es für diese Art der Nutzung deutlich schneller als MongoDB sein. Sie haben auch vorgefertigten Session-Clustering-Code für Java-Servlets, wenn Sie dies nicht selbst erstellen möchten.

Code für das Session-Clustering here on github. Oder hier für Maven artifact.

+0

Vielen Dank, ich werde auf jeden Fall einen Blick auf diesen Code. – IgorA