2017-05-24 2 views
-1

Ich möchte die Artikel IDs verfolgen, die jemand von einer bestimmten IP gewählt hat. So ein Schema in Richtung:Speichern von IP-Abstimmungen: SQL vs. NoSQL

IP | Stimmen


IP1 | 563, 342, 343, 654, 12 (Dies sind die Artikel-IDs)

IP2 | 1, 235, 1245, 895, 326

Dies würde offensichtlich Atomizität in der Spalte stimmen, und die meisten Leute werden vorschlagen, es zu normalisieren und Fremdschlüssel verwenden.

Aber mein Problem ist, dass ich nur 1 Rekord pro IP behalten möchte. Ich denke, es würde die Performance verbessern, da Skalierbarkeit ein Problem ist und die Anzahl der Zeilen nach einer gewissen Zeit katastrophal werden würde. Die ganze Tabelle durchzugehen, nur um alle IP1 oder IP2 zu finden, wäre ein Albtraum.

Ich bin ein absoluter Neuling im Entwerfen von Schema, also wäre so etwas wie NoSQL für diese Art von Sache besser geeignet, da diese Liste immer größer werden würde? Oder gibt es eine RDBMS-Lösung?

+0

Offensichtlich sind Sie ein totaler Neuling, wenn Sie nicht die bewährte Weisheit des Erstellens einer richtigen 'IPVotes'-Tabelle mit einer Zeile pro IP und pro Stimme nutzen möchten. –

+0

Total :). Wenn Sie etwas Literatur für ähnliche Situationen zu diesem Thema haben, zögern Sie nicht, es zu teilen. Ich bin sicher, dass es vielen Menschen helfen würde. –

Antwort

1

"Die meisten Leute", von denen ich eins bin, sind richtig. Ein Schema wie Sie legt nahe, dass eine einzelne Zeile pro IP auf Kosten relationaler Integrität und Konsistenz nicht wesentlich besser abschneidet und Ihnen tatsächlich in relativ kurzer Zeit erhebliche Probleme bereiten wird. Tu es nicht. Relationale Datenbanken können mehr als Sie denken, vor allem mit der richtigen Indizierung.

Ob Sie NoSQL verwenden sollten, ist eine separate Frage. Eine Dokumenten-Datenbank (zum Beispiel) wäre dann angebracht, wenn Sie hauptsächlich mit den Stimmen einer einzelnen IP-Adresse befasst sind, die Abstimmungsunterlagen in sich geschlossen halten können, um den Beitritt zu externen Dokumenten zu vermeiden, und sich weniger mit Slicing und Würfelaggregate. Ich weiß nicht, was Sie entwerfen, aber ich vermute, dass ein relationaler Ansatz wahrscheinlich gut genug dafür geeignet ist.

+0

Mit Tausenden von Wählern und Dutzenden von Stimmen pro Wähler, wenn nicht mehr, denke ich, dass es Leistungsprobleme geben würde, sogar mit richtiger Indexierung. Ich lehne mich mehr und mehr einer Dokument-Dabatase zu, wie du erwähnt hast. –

+1

Für eine Tabelle so einfach wie user_id/item_id/vote, würde ich erwarten, in die Millionen von Reihen zu kommen, ohne ins Schwitzen zu kommen. – dmfay

+0

Wäre es ein Vorteil, den NoSQL-Ansatz zu verwenden? –