我目前正在开发能够在我们的网站上使用主题标签的系统,但我在如何最好、最有效地在数据库中存储主题标签方面遇到了一些麻烦。需要进行设计,以便检索与搜索词匹配的帖子相对简单(例如在 Twitter 上,当您单击主题标签的链接时,它会显示带有该主题标签的所有推文)。主题标签将通过从创建的帖子(也类似于 Twitter)的内容中提取术语并插入它们来存储在数据库中。如何插入它们当然是当前的问题:目前我在两种可能的设计之间左右为难:
1)我的第一个设计想法(也许更传统)是3表设计:
2)第二种设计是2-table设计:
我在这些想法之间左右为难的原因是因为第一个选项似乎确实是更标准的方法,而且似乎有更多的“结构”。然而,由于它们是主题标签,因此我没有看到为每个主题标签实际分配唯一 ID 的太多目的,因为主题标签不是真正的分类,例如类别或流派等。
另外,当我尝试创建主题标签的搜索页面时,我必须使用更少的 JOIN,因为我不需要查找搜索术语的 ID,然后转到另一个表并找到具有该 ID 的关联帖子。
此外,当尝试简单地列出帖子的主题标签时,有点烦人的一件事是主题标签的打印结果可能与用户在帖子中对其进行风格化的方式不同。例如,如果一个用户添加了 #testing,但另一个用户之前输入了带有 #TeStIng 的帖子,则该帖子的主题标签将打印出 #TeStIng,因为这就是它保存在数据库查找表中的方式。当然,您可以使其区分大小写,但在搜索中 #testing 和 #TeStIng 应被视为相同的主题标签,这样可能会变得混乱。还是我在这件事上错了?有人对如何避免这种情况有建议吗?
另一方面,我对第二个表设计的担忧是,如果表变得很大,它可能会变得低效,因为查找字符串比搜索整数慢(我将在第一个设计中这样做)。但是,由于我必须在第一个设计中使用更多的 JOIN,实际上会存在性能差异吗?需要明确的是,当搜索字符串本身时,我将使用 = 运算符而不是 LIKE。
同样,我想如果我想查询主题标签本身,例如有多少帖子正在使用某个主题标签以及类似的东西,那么第一个设计会更有效,尽管第二个设计也不会很困难,我只是再次想知道效率。
有什么想法可以更好地发挥作用吗?最重要的是,通过主题标签搜索是有效的,因此例如我试图查找与 #test 相关联的帖子。理想情况下,我还希望能够从数据库中检索帖子的主题标签,因为它是由用户在帖子内容中风格化的。此时,围绕分析主题标签的所有其他查询和功能都是次要的。
我在查看帐单时发现,Data Transfer的价格几乎占了我账单的100%,所以我想确保我完全理解GET请求意味着Data Transfer包含什么。仅出于上下文考虑,我将网站托管在其他服务器上,并将其连接到S3来存储用户生成的文件。这些文件可供下载。数据传输是仅覆盖用于下载文件的带宽,还是用于显示站点上s3上存储的文件之一。因此,例如,如果我在s3上存储了一个mp3文件,并在要播放的网站上显示了该文件(不包括下载内容),那是否只是发送了GET请求以获取并显示该文件?对我来说,定义有点模棱两可。任何帮助!?