【问题标题】:which is better ? Reduncancy with faster access of data , or no redundancy and slower data access哪个更好 ?数据访问速度较快的冗余,或无冗余和数据访问速度较慢的冗余
【发布时间】:2013-02-12 16:37:16
【问题描述】:

我想为论坛网站创建一个数据库...

论坛网站的所有用户都将存储在一个名为 USERS 的表中,其中包含以下字段:

user_name
user_ID
(and additional details)

将有一个名为 FORUMS 的表,其中包含以下字段:

forum_ID
forum_creatorID(which is the ID of one of the users)
forum_topic
replies
views

对于创建的每个论坛(对于 FORUMS 表中的每一行),都会有一个名为 "forum_ID"_replies 的单独表,其中该论坛的确切 forum_ID 将在引号内替换...
因此,每个论坛都会有一个单独的表格,其中将保存该特定论坛的所有回复...

“forum_ID”_replies 表中的字段是

user_ID
user_name
comment
timestamp(for the comment)

我希望我的设计清楚......现在,我的疑问是

我将 user_name 保存为每个 "forum_ID"_replies 中的字段之一。但是,我认为 user_name 可以使用 user_ID 从 USERS 表中引用(或访问),而不是将其存储在每个“forum_ID”_replies 表中。以这种方式,减少了冗余。

但是,如果在每个表中都存储了user_name,那么对user_name的搜索就会减少,并且结果可以更快地显示出来。

哪个更优化?

存储名称及其 ID 以加快访问速度,还是仅存储 ID 以避免冗余?

【问题讨论】:

    标签: database db2 redundancy database-optimization


    【解决方案1】:

    “最佳”、“更好”等都是主观的。

    大多数数据库设计人员在您的提案中都会遇到一些问题。

    数据库normalization 建议不要复制数据 - 有充分的理由。如果您的用户更改了他们的用户名,会发生什么?您必须更新用户表,但还要找到他们的用户名出现的所有“forum_id”_replies 表;如果你把它搞砸了,突然之间,你就有一个相当明显的错误——人们认为他们在回复“bob”,但他们实际上是在回复“jane”。

    从性能的角度来看,除非您有深奥的性能需求(例如,您正在运行 Facebook),否则与用户表的联接不会产生可衡量的影响 - 您是在主键列上联接的,这是什么数据库真的,真的很擅长。

    最后,为每个论坛创建单独的表并不是一个好主意,除非您有巨大的性能/可扩展性需求(阅读:您是 Facebook) - 维护数据库、构建查询、将应用程序连接到数据库等很重要;在单个表中存储多个论坛的性能开销通常不会。

    “更好”取决于您的标准。如果(正如您在 cmets 中所写)您关心可扩展性和支持大量帖子,我的建议是从构建一种测试和测量可扩展性级别的方法开始。一旦你可以测试和测量,你就可以测试不同的解决方案,并知道它们是否有实质性的影响——这通常会显示出违反直觉的结果。性能优化通常以牺牲其他标准为代价 - 例如,您的设计更容易出错(重复信息意味着您可能会得到差异)并且编码成本更高(编写逻辑以加入每个论坛的不同表)。如果您无法证明它在可扩展性方面具有实质性好处,并且这种好处满足您的业务需求,那么您可能是在浪费时间和金钱。

    您可以使用 DBMonster 等工具来使用测试数据填充数据库,并使用 JMeter 来运行大量并发数据库查询 - 使用这些工具来尝试这两种解决方案,看看您的解决方案是否确实更快。

    【讨论】:

    • 如果我想在一个表中存储多个论坛的 cmets,我应该将相应的 forum_ID 与每个评论一起保存,对吗?而且我不确定该网站会发展到多大。它实际上是一个项目,我必须考虑所有场景(拥有大量用户的网站)
    • 大是相对的。如果您的网站变得非常大,那么瓶颈将不仅仅是表格设计。规则 #1 从简单有效的东西开始。
    • 我已经更新了回复您的评论的答案 - 但总的来说,除非您真的在构建下一个 Facebook,否则加入对可扩展性几乎没有影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多