【发布时间】:2011-02-28 03:47:05
【问题描述】:
这是为即将到来的项目准备的。我有两张表 - 第一张记录照片,第二张记录照片的排名
Photos:
+-------+-----------+------------------+
| id | photo | current_rank |
+-------+-----------+------------------+
| 1 | apple | 5 |
| 2 | orange | 9 |
+-------+-----------+------------------+
照片排名会定期变化,这是跟踪它的表格:
Ranks:
+-------+-----------+----------+-------------+
| id | photo_id | ranks | timestamp |
+-------+-----------+----------+-------------+
| 1 | 1 | 8 | * |
| 2 | 2 | 2 | * |
| 3 | 1 | 3 | * |
| 4 | 1 | 7 | * |
| 5 | 1 | 5 | * |
| 6 | 2 | 9 | * |
+-------+-----------+----------+-------------+ * = current timestamp
为了报告/分析目的,我们会跟踪每个排名。 [编辑] 用户可以按需访问统计信息。
我和一个在这个领域有经验的人谈过,他告诉我像上面那样存储等级是要走的路。但我还不确定。
这里的问题是数据冗余。将有数以万计的照片。对于最近的照片,照片排名每小时更改一次(很多次 - 在几分钟内),但对于较旧的照片则不那么频繁。按照这个速度,该表将在几个月内拥有数百万条记录。而且由于我没有使用大型数据库的经验,这让我有点紧张。
我想到了这个:
Ranks:
+-------+-----------+--------------------+
| id | photo_id | ranks |
+-------+-----------+--------------------+
| 1 | 1 | 8:*,3:*,7:*,5:* |
| 2 | 2 | 2:*,9:* |
+-------+-----------+--------------------+ * = current timestamp
这意味着 PHP 中有一些额外的代码来分割排名/时间(和排序),但这对我来说看起来不错。
这是优化表以提高性能的正确方法吗?你会推荐什么?
【问题讨论】:
-
排名是否与其他任何东西有关?喜欢给它的用户吗?如果是这样,这种关系有多重要? IE?你需要存储用户游戏的排名吗?
-
排名与照片无关。它是由计算机算法计算和更改的! :)
-
@Col:你的cmets总是让我微笑! :) 实际上,id 看起来更像这样:4606886418,现在大约有 200 万张照片。每个人的等级变化50+次。所以,虽然可能不算太大,但也不能说是小。
-
你只是不知道最基本的计算机技能:价值和它的表现之间的区别。 int 类型字段总是占用 4 字节,无论它持有什么值,1,10 或 4606886418。而你仍然有这些愚蠢的
:和,的,它们也会发生.和时间戳!傻逼,一开始没注意。时间戳,不是取相同的 4 字节,而是取全长 10 字节的字符串 -
@lost_in_code,不用担心 col 的 cmets。他/她喜欢虐待初学者。祝你好运;)
标签: php mysql database optimization