gpt4 book ai didi

php - 处理数据库中的标签

转载 作者:行者123 更新时间:2023-11-29 01:36:33 25 4
gpt4 key购买 nike

我的网站包含视频和标签,我不确定如何将整个内容存储在数据库中。我试过这种方式:

Table: Videos
Columns: video_id, title, tagsList
Indexes: video_id

Table: Tag
Columns: video_id, tagTitle
Indexes: video_id, tagTitle

问题是我有超过 10 万个视频,每个视频都有大约 10 个标签,所以我的标签表有 100 万行。因此,如果我想打印所有标签和每个标签的视频数量,这将花费不合理的时间。

最佳答案

首先我们必须定义问题。所以在这里我看到两个问题

  1. 数据库结构
  2. 访问信息的表现

  1. 对于数据库,您实际上可以为小猫发布的标签集合创建数据透视表。


创建表`video_tag`(
`video_id` int 不为空,
`tag_id` int 不为空,
`添加`日期时间不为空,
INDEX `main` (`tag_id` asc, `added` asc),
INDEX `video` (`video_id` asc)
);

这里的情况是拥有良好的索引,可以尽快为您提供信息。

  1. 关于获取基本信息:

    • 首先我会问自己是否可以预加载几个标签,然后在单击 more 按钮或其他东西时加载更多。获取所有标签的方式并不方便,因为当时用户/系统无法读取所有标签。
    • 如果获取所有标签的性能 Not Acceptable ,我是否使用可靠的技术来实现?也许用 mongo 数据库 ( https://www.mongodb.com ) 存储所有标签会为我提供更好的性能
    • 如果我需要计数器,我会使用实体化 View ,这样我就可以继续处理由事件触发的所有聚合过程(将标签添加到电影等)并存储在该 View 中,而无需在运行时对所有这些过程进行计数。

a) 作为结论,关于您的信息。我会预加载几个标签,然后在需要时获取更多标签。b) 我会创建物化 View 。表格


创建表`mv_movies_tags_counter`(
`video_id` int 不为空,
`count` int 不为空,
INDEX `video` (`video_id` asc)
);

并更新事件计数器:从电影中添加/删除标签。这样就可以由 mysql 触发器自动触发 https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

DELIMITER $$
CREATE TRIGGER inc_tags_counter AFTER INSERT ON video_tag
FOR EACH ROW
BEGIN
UPDATE mv_movies_tags_counter SET count = count + 1 WHERE video_id = NEW.video_id;
END $$
DELIMITER ;

DELIMITER $$
CREATE TRIGGER inc_tags_counter AFTER DELETE ON video_tag
FOR EACH ROW
BEGIN
UPDATE mv_movies_tags_counter SET count = count - 1 WHERE video_id = NEW.video_id;
END $$
DELIMITER ;

关于php - 处理数据库中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494331/

25 4 0