天天看點

記憶體資料庫應用之NBA籃球圖文直播室存儲設計

  記憶體資料庫适用于實時性通路要求很高的業務應用系統,尤其是實時資料直播報類系統,如籃球比賽圖文直播室,足球比賽圖文直播室等各類實時播放類的體育賽事。本文以nba籃球比賽直播室背景記憶體資料的存儲設計為業務切入點,以memcached記憶體資料庫為平台,詳細介紹了記憶體資料庫在實時業務應用的典型應用。

  nba籃球比賽分為主客場兩支球隊,允許各隊同時5名球員上場比賽,允許球員替換上場;分為上下半場,各兩節,每節12分鐘,全場48分鐘;正常時間内比分相同則進入加時,加時賽每節5分鐘,如加時後,比分仍相同則進入下一個加時,直至分出勝負。詳細比賽規則請參見度娘。

  nba籃球圖文直播室實作的功能主要包括實時資料、文字直播、技術統計、線上評球四大功能。實時資料包括實時比分、單節比分、目前場上隊員、本節犯規次數、剩餘暫停次數資訊。文字直播是比賽實況和互動資訊的實時播報。技術統計是兩隊參賽隊員各項技術參數的統計和整個球隊各項技術參數的彙總統計。如下圖所示:

記憶體資料庫應用之NBA籃球圖文直播室存儲設計

  詳細功能如下表所示:

序号

子產品

功能

說明

1

實時資料

實時比分

兩隊實時總比分

2

單節比分

兩隊目前節比分

3

場上隊員

兩隊目前場上隊員

4

本節犯規

本節犯規次數,滿5次罰球,清0

5

剩餘暫停

剩餘長短暫停數

6

文字直播

直播員實時更新的賽況資訊和互動資訊

7

技術統計

出場時間

每個球員的出場比賽時間

8

投籃(中-投)

每個球員兩分球投籃次數和投中次數

9

三分(中-投)

每個球員三分球投籃次數和投中次數

10

罰球(中-投)

每個球員罰籃次數和投中次數

11

前籃闆

每個球員前場籃闆個數

12

後籃闆

每個球員後場藍本個數

13

總籃闆

每個球員總籃闆個數

14

助攻

每個球員的助攻次數

15

搶斷

每個球員的搶斷次數

16

蓋帽

每個球員的蓋帽次數

17

失誤

每個球員的失誤次數

18

犯規

每個球員的犯規次數

19

得分

每個球員的得分數

20

線上評球

會員評球

注冊會員的線上評論資訊

21

遊客評球

遊客身份的線上評論資訊

  memcached提供key-value結構的資料存儲,這也是目前主流記憶體資料庫的存儲方式,目前版本并不支援結構化資料的存儲,本文隻針對key-value存儲結構的記憶體資料庫進行設計,其他模式單獨讨論,是以nba籃球直播室背景資料存儲設計最主要的内容就是key的設計。

  主隊使用關鍵字host,客隊使用關鍵字guest,所有關鍵字同意采用大寫字母表示。由于雙方資料項完全相同,是以本文隻列出主隊的關鍵字,客隊資料項的關鍵之隻需要替換host關鍵字即可。

記憶體資料庫應用之NBA籃球圖文直播室存儲設計
記憶體資料庫應用之NBA籃球圖文直播室存儲設計

  設計球員技術統計資料時,球員資訊的表達有兩種方案:

  一是采用球衣号碼作為關鍵字,這種方案的好處是關鍵字較短,按照nba籃球比賽規則,球衣号碼範圍是0-99,是以隻需要兩位即可。同時考慮到nba關于單場 比賽球員報名人數的限制,是以在此資料的最大存儲量是15。

  二是采用球員姓名作為關鍵字,這種方案的好處是球員資料和球員姓名不需要進行二次比對,缺點是球員姓名過長,導緻存儲空間的增加。這裡采用球衣号碼作為 球員辨別。

  彙總技術統計采用背景程式自動計算的方式進行,直播員隻需更新每個球員的目前資料即可。

記憶體資料庫應用之NBA籃球圖文直播室存儲設計
記憶體資料庫應用之NBA籃球圖文直播室存儲設計

   所有資料都采用過期設定,考慮到一場籃球比賽出現加時及其他各類情況,以及比賽當天賽事收關注度比較高的實際業務需求,過期周期設定為24小時。

  實時資料最終值除犯規次數和剩餘暫停數外,和技術統計資料一起存入關系型資料庫。文字直播資料和評論資訊存入非關系型資料庫。