我的问题首先出现,然后我将描述整个情况和当前的解决方案:
Questions.
1. Why could mySQL make enormously lots of continous read|write (300-1000 megaBytes) disk operations?
2. Is DB structure optimal (need advice otherwise)?
3. Do UniqueKey could slow down DB?
4. What could be better solution for the situation?
5. At the end vServer is getting down and I got mail with ~'ETIMEDOUT: Connection timed out - connect (2)'; So maybe issue is not in DB structure but it is some misconfiguration?
情况。终端设备上的用户正在玩游戏,当游戏结束时,他们将游戏记录存储在中央数据库中。用户可以看到按高分排序的高分表。我不能说有很多用户。让我们假设每 1 分钟有 1 个用户。
解决方案。灯。由于用户正在玩几个类似的游戏,因此 DB 中有几个类似的表+视图对。(总共约 25 个表格 + 25 个视图)。大多数表包含约 30 000 条记录。其中 3 个包含多达 150 000 条记录。
为了唯一地存储用户:1user-1record 我做了一个唯一的键 UNIQUE INDEX 用户 ID(用户 ID、游戏名称、游戏类型、记录值)。
由于用户应该看到排序后的值(高分),我为一个表格创建了一个视图,显示了需要什么。所以外部 php 脚本使用视图而不是表。
CREATE TABLE supergameN (
id INT(11) NOT NULL AUTO_INCREMENT,
userid VARCHAR(255) NOT NULL,
username VARCHAR(50) NOT NULL,
gamename VARCHAR(100) NOT NULL,
gametype VARCHAR(100) NOT NULL,
description VARCHAR(100) NULL DEFAULT 'empty',
recordvalue INT(11) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX userid (userid, gamename, gametype, recordvalue)
)
CREATE VIEW supergameN_view AS
SELECT
id,
userid,
username,
gamename,
gametype,
description,
recordvalue
FROM supergameN
ORDER BY gametype, recordvalue DESC
提前致谢。亚历克斯。