gpt4 book ai didi

mysql - "don' t 的数据库模式再次向我展示了我之前在 mysql 中看到的内容

转载 作者:可可西里 更新时间:2023-11-01 08:54:34 25 4
gpt4 key购买 nike

我正在制作一个显示图片的网站。站点的特殊功能是“不要再向我展示我以前看到的内容”。这意味着,如果您看到一张图片,它会转到您的“存档”类别。会有很多图像和类别。而且我需要非常平滑的数据库架构来实现性能。

当您点击一张图片时,它会出现在灯箱上,并且在灯箱代码中它会使用 ajax 发送请求,以便专门为您存档该图片。

对于大约 5.000 个图像和 20.000 个用户,该数据库架构是否表现出色?

users
user_id
user_email

pictures
picture_id
picture_url
tags

archived
user_id
picture_id

图像将出现在您面前,除了此架构上所有图像中的存档图像之外...

最佳答案

如果不了解所有细节,这是一个很难回答的问题。你提到会有多少用户和图像。每个用户(平均)在他们的归档列表中有多少张图片?如果该数字很小,归档表将不会接近 1 亿行。

100M 行本身应该不是问题,因为数据库可以处理这个问题。问题可能(或将)与您想要查询数据的方式有关。像这样的东西:

SELECT 
*
FROM
picture
WHERE
picture_id NOT IN
(
SELECT picture_id FROM archived WHERE user_id = [userIdParameter]
)

对于 1 亿行,这可能不会很好地执行。

另一种选择是交叉连接用户和图片,以便存档表始终包含笛卡尔积。所以表格将是:

archived
user_id
picture_id
visited

然后你可以这样查询:

SELECT
p.*
FROM
picture p
INNER JOIN archived a ON p.picture_id = a.picture_id
WHERE
a.user_id = [userIdParameter]
AND a.visited = [false]

这应该可以通过适当的索引来执行,但是会带来一个问题,即每当将用户或图片添加到系统时,都必须确保在存档表中创建行。这也意味着您总是的行数等于图片 * 用户(在您的示例中为 100M)。在您的情况下,这可能是不可取的。

最重要的是,您将必须创建一些接近预期容量的测试数据,并进行一些接近负载的性能测试。如果您认为这是系统的关键潜在性能瓶颈,那么值得投入时间。

关于mysql - "don' t 的数据库模式再次向我展示了我之前在 mysql 中看到的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com