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