Cơ sở dữ liệu quan hệ ngày nay bị loại vì không hiệu quả, nhưng khi lưu trữ loại nhật ký mà bạn đang nói đến, bạn không thực sự cần hiệu quả vì chúng sẽ không được truy cập liên tục bởi trò chơi hoặc người dùng của nó - chỉ nhóm của bạn mới cần để đọc dữ liệu.
Vì vậy, "hiệu quả" không quan trọng lắm. Điều quan trọng hơn là sắp xếp dữ liệu theo cách giúp bạn dễ dàng kể câu chuyện về những gì người dùng đang làm trong trò chơi. Các nhà phát triển của bạn thường sẽ cần sử dụng dữ liệu này và hiển thị nó trong một giao diện dễ đọc cho các nhà phân tích và nhà phân tích đôi khi sẽ cần truy vấn dữ liệu để đào sâu vào hành vi của người dùng. Chẳng hạn, nếu người chơi đang mua một mặt hàng nào đó trước khi cập nhật, nhưng ngừng mua nó sau khi cập nhật, một nhà phân tích sẽ có lợi bằng cách viết một số truy vấn nhất định phơi bày một số con số về hành vi xung quanh giao dịch đó để xác định lý do tại sao người dùng không còn mua nó nữa. Tốt nhất là họ có ngôn ngữ truy vấn chuẩn để làm việc với tài liệu đó. Nếu họ phải biến những truy vấn này thành định dạng nhị phân tùy chỉnh, công việc của họ sẽ trở nên khó khăn hơn,
Nói chung các sự kiện trò chơi trông giống như thế này (đặc biệt là định dạng của 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"]
},
}
Sự kiện này thường bao gồm tên sự kiện, ID người dùng, ID phiên, dấu thời gian và các tham số cho phép bạn ghi lại bất kỳ dữ liệu nào bạn thấy hữu ích để ghi lại xung quanh sự kiện đó. Và theo kinh nghiệm của tôi, các định dạng cơ sở dữ liệu quan hệ là tốt nhất để ghi lại cấu trúc như vậy.