Relationale Datenbanken werden heutzutage als ineffizient eingestuft. Wenn Sie jedoch die Art von Protokollen speichern, über die Sie sprechen, benötigen Sie keine wirkliche Effizienz, da das Spiel oder seine Benutzer nicht ständig auf sie zugreifen können - nur Ihr Team wird sie benötigen um die Daten zu lesen.
"Effizienz" spielt also keine Rolle. Vielmehr geht es darum, die Daten so zu ordnen, dass auf einfache Weise erzählt werden kann, was die Benutzer im Spiel tun. Ihre Entwickler müssen diese Daten in der Regel konsumieren und in einer für Analysten leicht lesbaren Oberfläche anzeigen, und Analysten müssen manchmal die Daten abfragen, um das Nutzerverhalten zu untersuchen. Wenn Spieler beispielsweise einen bestimmten Artikel vor einem Update kaufen, diesen aber nach einem Update nicht mehr kaufen, kann ein Analyst bestimmte Abfragen durchführen, um herauszufinden, warum Benutzer ihn nicht mehr kaufen. Am besten verwenden sie eine Standard-Abfragesprache, die gut dokumentiert ist. Wenn sie diese Abfragen in ein benutzerdefiniertes Binärformat umwandeln müssen, werden ihre Jobs VIEL schwieriger.
Im Allgemeinen sehen Spielevents so aus (dies ist insbesondere das Format von DeltaDNA)
{
"eventName":"specific event code – eg. gameStarted",
"userID":"ABCD1-4321a879b185fcb9c6ca27abc5387e914",
"sessionID":"4879bf37-8566-46ce-9f3b-bd18d6ac614e",
"eventTimestamp":"yyyy-mm-dd hh:mm:ss.SSS",
"eventParams":
{
"platform":"WEB",
"param1":"stringParam",
"param2":true,
"param3":1234,
"param4":["a","b","c"]
},
}
Das Ereignis enthält normalerweise einen Ereignisnamen, eine Benutzer-ID, eine Sitzungs-ID, einen Zeitstempel und Parameter, mit denen Sie alle Daten aufzeichnen können, die Sie für die Aufzeichnung des Ereignisses als nützlich erachten. Und meiner Erfahrung nach eignen sich relationale Datenbankformate am besten, um eine solche Struktur aufzuzeichnen.