私の質問が最初に来て、次に全体の状況と現在の解決策について説明します。
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?
状況。エンドデバイスのユーザーはゲームをプレイしており、ゲームオーバーになるとゲームの記録を中央の DB に保存します。ユーザーは、ハイスコアでソートされたハイスコア テーブルを確認できます。利用者が多いとは言えません。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
前もって感謝します。アレックス。