实时API调用的数据库模式建议


Database schema advice for real time API calls

我有一个本地高中体育联盟的项目,他们想要实时更新统计数据。将会有参加赛事(美式足球、篮球、排球、高尔夫、摔跤等)的人使用我的CMS系统来更新统计数据。

我似乎不知道如何存储这些统计数据,所以当REST API调用发生时,最新的事件将被发送回来(例如:收集当时在服务器上发生的所有篮球比赛并保存它们)。

来到服务器的数据是JSON格式,我希望能够将其存储为这样,每个运动是主要的关键,然后在游戏的基础上的统计数据。在我看来,使用RDBMS或其他数据库类型将是毫无意义的,因为实时添加统计数据将意味着大量数据几乎不同的行,然后收集最近的游戏将是一种痛苦,如果我要打破每个人的POST并将其保存为自己的行。

另一方面,我可以将所有内容存储在一个文件中,收集传入的统计信息并更新文件。但是如果有很多写操作发生,对API调用的响应可能会变慢。

有什么建议吗?我的哪一个想法是错的?

将数据存储为JSON通常会限制您查询数据的能力。我不建议那样做。JSON是完全可以在服务器上接受的格式,但您应该立即将其反序列化为对象,并以满足您的用例的方式存储它。在我看来,您的用例需要关系数据库。例如,像这样的模式会给你很好的性能找到所有正在发生的游戏:

Sport:
    pk int sportId
       varchar description
Game:
    pk int gameId
    fk int sportId
       datetime start
       datetime end 
Player:
    pk int playerId
       varchar name
StatType:
    pk int statTypeId
       varchar description
Stat:
    pk bigint statId
    fk int gameId
    fk int playerId
    fk int statTypeId
       datetime time
       real value

获取当前游戏:

SELECT * FROM Game WHERE currentTime > start AND end IS NULL

获取一个球员的所有时间数据

SELECT max(st.description), sum(value) FROM Stat s LEFT JOIN StatDescription st ON s.statTypeId = st.statTypeId LEFT JOIN Player p ON s.playerId = p.playerId GROUP BY st.statTypeId WHERE p.name = 'John Smith'