2011-01-05 6 views
2

Ich habe mit Redis experimentiert, und ich mag die Skalierbarkeit, die es auf den Tisch bringt. Ich frage mich jedoch, wie man mit Änderungen an Datenstrukturen für ein System umgehen kann, das bereits in Produktion ist.Redis - Umgang mit Änderungen an Datenstrukturen

Zum Beispiel möchte ich sagen, dass ich Informationen über einen Benutzer sammeln, und ich benutze die User_id als Schlüssel und dumping die anderen Daten über den Benutzer als kommagetrennte Werte.

user_id: name, email, etc. 

Nun sagen nach etwa 100.000 Datensätze, merke ich, dass ich von email zur Abfrage benötigen - wie würde ich jetzt eine Momentaufnahme der vorhandenen Daten übernehmen und einen neuen Index für es schaffen?

Antwort

0

Aus meinem Verständnis von Redis würde dies etwas erfordern, für das Redis nicht gedacht ist. Sie müssten alle Ihre Datensätze durchlaufen (mit den Schlüsseln *) und dann die Reihenfolge der Daten ändern und einen neuen Schlüssel erstellen. Ich würde persönlich empfehlen, eine Liste anstelle einer durch Komma getrennten Zeichenfolge zu verwenden. In einer Liste können Sie die Reihenfolge von innen nach redis ändern. Eine Redis-Liste sieht wie folgt aus:

"Colum" => [0] [email protected] 
      [1] password 
      [2] Something 

Ich baue eine App, in der ich das gleiche Problem angetroffen habe. Ich löste es, indem ich eine Liste für alle Benutzerinformationen hatte und dann einen Schlüssel mit der E-Mail des Benutzers mit einem Wert der Benutzer-ID hatte. Also meine Datenbank würde so etwas wie:

Also konnte ich die ID oder die E-Mail abfragen und immer noch die Informationen, die ich brauchte.

Leider konnte ich Ihre Frage nicht direkt beantworten. Hoffe nur, das hat geholfen.

+0

Ja, danke, mit Listen scheint die goldene Regel hier zu sein. Jede Form von CSV würde zukünftige Änderungen sehr erschweren. – jeffreyveon

+0

Ich bin froh, dass ich helfen konnte. Ich fand das auch auf die harte Tour, als ich in Redis anfing – Colum

1

Die Verwendung von CSV ist keine gute Idee, wenn Sie Änderungen unterstützen möchten. Sie müssen einen Serializer verwenden, der fehlende/neue Werte verarbeitet, wenn alles in einem Schlüssel enthalten ist, oder Sie können einen Redis-Hash verwenden, der Ihnen benannte Unterschlüssel gibt. In beiden Fällen können Sie Felder hinzufügen/entfernen, mit der einzigen Bedingung, dass Ihr Code weiß, was zu tun ist, wenn er einen Datensatz ohne den neuen Wert liest.

Um die Suche per E-Mail zu ermöglichen, müssen Sie einen Index hinzufügen - im Grunde ein Schlüssel (oder eine Liste) für jede E-Mail mit der Benutzer-ID als Wert. Sie müssen diesen Index auffüllen, indem Sie alle Schlüssel einmal abrufen und dann sicherstellen, dass Sie ihn aktualisieren, wenn sich die E-Mails ändern.

Sie könnten über alle Schlüssel iterieren und sie mit einer anderen ID speichern, aber das ist wahrscheinlich mehr Mühe, als es wert ist.