Was ist der Nachteil, wenn Sie Redis anstelle von RDBMS verwenden?

8

Wenn ich zum Beispiel versuche, etwas zu implementieren, das wie die Graph-API von Facebook aussieht, die sehr schnell sein und Millionen von Benutzern unterstützen muss, was ist der Nachteil, wenn Sie Redis anstelle eines RDBMS verwenden?

Danke! Jonathan

    
Jonathan Leung 05.06.2012, 23:10
quelle

1 Antwort

25

Es gibt viele mögliche Vorteile und mögliche Nachteile der Verwendung von Redis anstelle eines klassischen RDBMS. Sie sind wirklich sehr unterschiedliche Bestien.

Konzentrieren Sie sich nur auf die möglichen Nachteile:

  • Redis ist ein In-Memory-Speicher: Alle Ihre Daten müssen in den Speicher passen. RDBMS speichert die Daten normalerweise auf Festplatten und zwischenspeichert einen Teil der Daten im Speicher. Mit einem RDBMS können Sie mehr Daten verwalten als Ihr Arbeitsspeicher. Mit Redis können Sie nicht.

  • Redis ist ein Datenstrukturserver. Es gibt keine Abfragesprache (nur Befehle) und keine Unterstützung für eine relationale Algebra. Sie können keine Ad-hoc-Abfragen senden (wie Sie SQL in einem RDBMS verwenden können). Alle Datenzugriffe sollten vom Entwickler erwartet werden, und geeignete Datenzugriffspfade müssen entworfen werden. Viel Flexibilität ist verloren.

  • Redis bietet zwei Persistenzoptionen: reguläre Snapshot-Dateien und nur für Anhänge bestimmte Dateien. Keiner von ihnen ist so sicher wie ein echter Transaktionsserver, der Redo / Undo-Logging, Block-Checking, Point-in-Time-Recovery, Flashback-Fähigkeiten usw. bietet.

  • Redis bietet nur grundlegende Sicherheit (in Bezug auf Zugriffsrechte) auf Instanzenebene. Alle RDBMS bieten feinkörnige Zugriffssteuerungslisten für jedes Objekt (oder Rollenverwaltung).

  • Eine eindeutige Redis-Instanz ist nicht skalierbar. Es läuft nur auf einem CPU-Kern im Singlethread-Modus. Um Skalierbarkeit zu erhalten, müssen mehrere Redis-Instanzen bereitgestellt und gestartet werden. Verteilung und Sharding werden auf der Client-Seite durchgeführt (d. H. Der Entwickler muss sich um sie kümmern). Wenn Sie sie mit einer eindeutigen Redis-Instanz vergleichen, bieten die meisten RDBMS eine höhere Skalierbarkeit (in der Regel wird Parallelität auf der Verbindungsebene bereitgestellt). Sie sind multi-prozessiert (Oracle, PostgreSQL, ...) oder multi-threaded (MySQL, Microsoft SQL Server, ...) und nutzen die Vorteile von Multi-Cores-Maschinen.

Hier habe ich nur die Hauptnachteile beschrieben, aber bedenken Sie, dass Redis auch viele Vorteile bietet (sehr schnell, gute Parallelität, geringe Latenz, Protokoll-Pipelining, gut um optimistische simultane Muster zu implementieren, gute Usability) / Komplexitätsverhältnis, ausgezeichnete Unterstützung von Salvatore und Pieter, pragmatischer No-Nonsense-Ansatz, ...)

Für Ihr spezifisches Problem (Grafik) würde ich vorschlagen, neo4J oder OrientDB zu betrachten, die speziell entworfen sind, um graph-orientierte Daten zu speichern.

    
Didier Spezia 06.06.2012, 11:35
quelle

Tags und Links