2017-06-27 2 views
0

Ich lese ein paar Antworten in Stackoverflow. Habe aber noch eine Frage. Ich möchte etwas wie Lotteriespiel schreiben.Datenbank - MS SQL - Lotteriespiel -

Im Design - Benutzer kann Spiel wählen. Und Ticket kaufen. Jetzt kann der Benutzer eine Menge Tickets kaufen. Angenommen, Benutzer kann 1000-2000 Tickets kaufen. (50 Spiele * 40 ticekts zum Beispiel) Nein, ich denke nur über den Fall, wenn ich 1M Benutzer habe und jeder 2K Tickets kaufen (Ich weiß seinen Klang wie unmögliche Fall, aber wollen alles überprüfen, bevor Sie in die Produktion gehen)

1M Benutzer * 2K Tickets für jeden Benutzer = 2B Tickets.

Im Moment habe ich Tisch wie:

Id | UserId | GameId | TicketId | IsActive | TimeInsert 

UserId und GameID - ist Index

und heute habe ich für jedes Ticket rudern kann. Sein Mittelwert im Falle von 2B Ticekts - ich werde 2B Reihen haben.

In meinem Design Ticket hat uniq Nummer - und Benutzer kann 1 spezifisches Ticket abbrechen/löschen.


Frage: Ich verstehe, dass 2B Zeilen in der Datenbank - nicht gut. (sehr schlecht))))

Frage - Was ist die beste Vorgehensweise, um Daten wie diese zu speichern?

Eine der Optionen, die ich sehe zu speichern Ihre Tickets speichern in BLOB. Zum Beispiel 50 Spiele * 40 Tickets ===> 50 Reihen. und in BLOB 40 Tickets speichern.

P.S Sorry für meine englische Grammatik.

+0

Normalerweise gibt eine Lotterie eine feste Anzahl von Tickets aus. Die Tickets, die tatsächlich ausgestellt werden, müssen einzeln nachverfolgt werden. Keine Lotterie, die ich kenne, würde tatsächlich 2 Milliarden Tickets pro Spiel ausgeben, also ist das kein Problem. Die Gesamtzahl der Tickets, nicht wie viele Tickets ein Benutzer kauft, ist der wichtige Faktor. Es scheint unwahrscheinlich, dass 50 verschiedene Spiele gleichzeitig laufen. Selbst wenn Sie 2 Milliarden Zeilen speichern mussten - na und? Ich pflege eine Datenbank mit einer Tabelle, die über 6 Milliarden Zeilen enthält. –

+0

Danke. Ich schreibe Code auf C#. Der beste Weg ist also SQL-Abfrage (ADO .NET) zu schreiben und kein ORM zu benutzen, oder? –

+0

Gehen Sie mit einer einfachen Lösung und es ist ein Ticket pro Zeile. Dafür werden die Datenbanken erstellt und dafür optimiert. Durch die Bündelung von Daten in Blobs wird Ihr Leben fürchterlich. Stell dir vor, wie würdest du aus diesen Daten auswählen? Kein Index wird dir dabei helfen. Und wenn Sie wirklich an die Wand gehen, dann gibt es immer noch [Partitionierung] (https://www.sqlshack.com/database-table-partitioning-sql-server/) in SQL Server. Ich würde mir deswegen keine Sorgen machen. Wie die Dokumentation besagt, ist das Limit für Zeilen verfügbarer Speicher. –

Antwort

0

Mit einem schmalen Tisch wie diesem würde ich fortfahren und eine Zeile pro Ticket speichern. 2B Zeilen ist nicht so schlecht in einer engen Tabelle.

+0

Vielen Dank für die schnelle Antwort. –

Verwandte Themen