首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL中使用时间戳存储大量数据的最佳方法

在MySQL中使用时间戳存储大量数据的最佳方法
EN

Stack Overflow用户
提问于 2014-12-22 14:34:03
回答 1查看 153关注 0票数 3

我该怎么办?

想象一下网球比赛。

操作人员按按钮(动作) "Ace“、”故障“、”胜利者“、”非强制错误“等。我们有很多来自用户的数据库请求(~每分钟1000)。

存储match_id、播放器、动作、time_of_action的最佳方式是什么?

1)表,每匹配1行: match_id,actions。动作,播放器,时间戳被编码成一个字符串#of player TINYINT id of action CHAR timestamp TIMESTAMP

示例: actions = "1A2014-11-28 09:01:21 2W2014-11-28 09:01:33 1F2014-11-28 09:01:49“

2)一场比赛的多行表: id、match_id、player、action_id、当前时间戳(id主键)一天后它将是250 K行(每次比赛300次*在1场比赛中40场*每天20场比赛)。

还有什么是更好的:很多行和很多请求从match_id =N或相同请求数的分数中选择player、match_id、时间戳,减少行数( /300 ),但行中的数据要大得多?

对于我丑陋的语言,我希望你能理解我,如果你不理解,告诉我

添加:我将使用它进行现场或比赛后的比赛统计。用户打开match Federer - Nadal的页面统计数据和每10-30秒页面刷新示例:GB/slamtracker/index.html&syn=none&

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-22 15:07:13

我建议您创建名为

代码语言:javascript
运行
复制
 match    match_id, name, venue          A row for each distinct match
 player   player_id, name                A row for each distinct player 
 action   action_id, name                This is a codelist  1=Ace  2=Fault, etc.

这些表将是相对静态的。

然后,我建议您创建一个事件表,该表按以下顺序包含以下项。

代码语言:javascript
运行
复制
match_id
ts            (TIMESTAMP)
action_id
player_id

您应该按照我展示的顺序,将所有这四个列都包含在一个复合主键中。

每次评分者记录一个动作时,您都会在这个表中插入一个新行。

当您想要显示特定匹配的操作时,可以这样做:

代码语言:javascript
运行
复制
SELECT event.ts,
       action.name AS action,
       player.name AS player
  FROM event
  JOIN player ON event.player_id = player.player_id
  JOIN action ON event.action_id = action.action_id
 WHERE event.match_id = <<whatever match ID>> 
 ORDER BY event.match_id, event.ts

由于event表中复合主键中列的顺序,即使在向该表插入许多新行时,这种查询也将非常有效。

MySQL就是为这类应用而开发的。不过,当您的站点开始接收大量的用户流量时,您可能应该安排每隔几秒钟运行这些查询一次,缓存结果,并使用缓存的结果向用户发送信息。

如果您希望检索当前活动的所有匹配的匹配If (即,在最后十分钟内使用一个事件),您可以这样做。

代码语言:javascript
运行
复制
SELECT DISTINCT match.id, match.name, match.venue
  FROM event
  JOIN match on event.match_id = match.match_id
 WHERE event.ts >= NOW() - INTERVAL 10 MINUTE

如果您需要经常执行这类查询,我建议您在(ts, match_id)上创建一个额外的索引。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27604741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档