Frage

Ich habe ein paar Fragen gesehen hier über Benutzereinstellungen zu speichern, aber sie scheinen vor allem auf einen ziemlich minimalen Satz von Präferenzen zu beziehen. Ich bin zur Zeit auf einem hochgradig anpassbare Web-App arbeiten, die eine große Anzahl von Einstellungen speichern müssen, und ich bin zu kämpfen mit, wie sie speichern.

Die Art der Präferenzen werde ich schließen booleans zur Anzeige bestimmte Tooltips wird die Speicherung, die Anordnung der verschiedenen Content-Module auf einer Seite, die Seite nach der Anmeldung, Standardwerte für bestimmte Formularfelder anzuzeigen, usw. All-in-all, ich erwarte es wird für jeden Benutzer 50+ Vorlieben dieser Art sein, wobei die Daten meist booleans und ganze Zahlen sind.

Ich bin kein großer Fan von Serialisierung, aber ich bin besorgt über die Skalierbarkeit der einzelne Präferenz als einzelne Zeile zu speichern. Gedanken?

War es hilfreich?

Lösung

ein Klecks Daten Serialisierung ist der Weg hier zu gehen, aber nicht aus Leistungsgründen - nicht, weil dies ist ein Aspekt des Systems, das wahrscheinlich sehen große Anzahl von Änderungen ist. Sie wollen nicht nur haben, um Ihr DB-Schema zu ändern, weil Sie jetzt eine Präferenz müssen, damit auf den erweiterten Modus auf einigen Seite oder etwas machen.

Das Entity-Attribut-Wert-Modell, das HLGEM erwähnt paßt dies von einer „leicht zu entwickeln“ Perspektive, aber, wie er sagt, es wäre sehr schlechte Leistung hat.

Was Sie mit serialisierten Objekten aufgeben würden die Möglichkeit, direkt würde an die DB für Benutzer abfragen, um einen bestimmten Mustervergleich (vielleicht sind Tracking Sie einen Bug nach unten, die nur mit einer Kombination von Einstellungen auftreten würden, und Sie wollen sehen, ob Sie haben alle Benutzer, die diese Kombination haben).

Andere Tipps

, was Sie tun, vermeiden mit der Entity-attrivute-Wert-Struktur für diesen ( http: //en.wikipedia.org/wiki/Entity-Attribute-Value_model ), es sei denn Sie ein sehr schlecht funktionierenden Systems. Ein Anruf an einen Tisch mit 50 Spalten wird viel schneller sein als ein Anruf zu einer Tabelle, die Sie zu 50-mal verbinden haben alle Informationen, die Sie benötigen.

würde ich eine verwandte Tabelle für jede allgemeine Gruppe von Präferenzen (Anmeldeeinstellungen, allgemeine Präferenzen, bestimmte Seite oder Funktionen Präferenzen) machen stützen sie auf, wie Sie für Einstellungen zu abfragen beabsichtigen (wenn Sie alle zurück auf Login ziehen wollen vice den für die gesamte Website erforderlich bei der Anmeldung und diejenigen, benötigt nur für spezielle Bereiche ziehen, wenn der Benutzer diejenigen trifft, so eine Kombination davon) und die boolean Spalten für die Art von Präferenzen, dass festgelegt haben. Auf diese Weise alle Einstellungen, die Sie für jeden Bereich der Website benötigen in der gleichen Tabelle oder höchstens zwei oder drei Tabellen wird es relativ einfach machen, die Informationen zurück zu bekommen. Dies ist ein Ort, an dem Design, um die Leistung entscheidend ist (Sie Präferenzen die ganze Zeit so sogar Millisekunden zählen werden versuchen, nach oben), so dass Sie wirklich Leistung zuerst in Ihrem Design in Betracht ziehen sollten. Es ist viel wichtiger, hier als jeder Wunsch dies bei der Einrichtung sein, objektorientierte oder schaffen weniger Arbeit für den Entwickler erscheinen zu lassen.

Ich weiß nicht, ob ich auch Informationen wie Benutzereinstellungen in einer Datenbank gespeichert werden sollte. Es scheint, dass man sich viele suchen wollen (wenn nicht alle) Benutzereinstellungen, sobald die Benutzer anmeldet; wenn Sie eine Reihe von db-Abfragen am Ende tun, wird Ihr System ganz langsam am Ende. Stattdessen würde ich empfehlen, alle Benutzereinstellungen in einer einzigen Datei (oder ein einzelner Datensatz irgendwo) und Schlucken es auf Groß- und Zwischenspeichern es, sobald der Benutzer anmeldet.

persistierenden

, um die Benutzerdaten Vorausgesetzt wird bereits in einer Datenbank gespeichert, dann sehe ich kein wirkliches Problem alles in einer Zeile zu speichern, vor allem, wenn Sie gegen die Daten also basierte Abfragen zu tun brauchen. Wählen Sie alle Benutzer bevorzugt A oder B etc.

Ich würde aber, laden Sie es in eine Klasse und bestehen diese Klasse über eine Art von Caching-Mechanismus.

Wenn Sie nicht auf den Präferenzen suchen müssen Sie immer die Einstellungen als XML speichern könnten und es zu einer „Preference“ Spalte speichern. Sollten neue Vorlieben in der Zukunft das Hinzufügen etwas einfacher;)

Eine weitere Option, die Sie tun können (wenn Sie in einem DB gespeichert nicht Ihre Einzelteile benötigen, zum Beispiel für Sachen Statistiken zu überprüfen (wer was tut, etc)), könnten Sie einfach ihre Einstellungen alle in einem Cookie setzen und speichern es auf ihrer Maschine.

natürlich mit Keksen kommt alle Einsprüche von Cookies. aber nur eine andere Idee ...

Es gibt bestimmte Präferenzen der Benutzer bevorzugt mehr (alle Tiere sind gleich, aber einige sind gleicher als andere). Diese sollten speziell für den Abruf und die Anwendung bei der Anmeldung auf die Schnittstelle optimiert werden. Da die Tiefe der Präferenz untergeht, können sie mit Hilfe unabhängig von Kriterien und möglicherweise als separate Spalten gespeichert werden zusammengefasst als Arrays (z. Schriftart Präferenz Spalte enthält Schriftart, Größe und Farbe und bezieht sich auf eine Schriftart-Tabelle). Index auch die stark frequentierten Spalten db Tooling mit und Redesign aggregiert Spalten aufgeteilt, so dass Sie, welches Element in der Aggregation identifizieren können, ist unter starken Nachfrage.

Alles in alles Benutzereinstellungen sind in der Regel sehr statisch sein (das heißt wie eine Gewohnheit ist), können die Benutzerdaten nicht zu verwechseln, die mit den Präferenzen höher wandelbar ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top