我正在构建一个跟踪图像视图记录的系统。
此项目中的主要表是视图表和max_view表。视图表保存视图的日期,时间和数量。并且max_view表记录了可以查看图像的最大数量。
每次加载图像时。我将日期和时间存储到视图表中。并且将从max_view表中的图像的总最大视图减去1。
表示例:
id | image_id | datetime | username
1 1 2015-03-02 02:30:34 user1
2 1 2015-03-02 02:32:34 user2
3 2 2015-03-03 01:40:34 user1
id | max_view | image_loc
1 1000 /image/image_1.jpg
2 500 /image/image_2.jpg
我在以下yii2框架中的SQL查询:
随机选择图像:
$row = Yii::$app->db->createCommand("SELECT id FROM image_source ORDER BY RAND()")->queryOne();
插入视图表:
Yii::$app->db->createCommand()->insert('view', [
'image_id' => $row['image_id'],
'datetime' => $datetime,
'username' => $user,
])->execute();
更新最大观看次数:
Yii::$app->db->createCommand("UPDATE max_view SET max_view=max_view-1 WHERE id=$image_id")->execute();
我的问题是,当有大量用户同时查看时。数据不一致。插入视图表的数据往往更有时候。例如,如果有10个人观看了相同的图像。视图表应该有10个记录,max_view表将从该图像的最大视图总数减去10。但不知何故,它有时只会从max_view中减去9。
如果我在我的本地机器上测试它,它可以完美地工作。我可以知道如何解决这个问题吗?我怀疑服务器速度不够快,无法捕获max_view数据。如何使其更加一致?
答案 0 :(得分:1)
如果您尝试同时从不同的主机编辑SQL数据库中的数据,则通常无法正常工作。 而不是只需将一个新条目添加到一个只显示“1”的表中,并且每次都将图像ID计入并计算,直到它们达到1000.