【问题标题】:Store both BBCode and HTML version in database?将 BBCode 和 HTML 版本都存储在数据库中?
【发布时间】:2017-12-19 18:45:16
【问题描述】:

在 Stackoverflow 上,我发现了有关将 BBCode 或 HTML 存储到数据库中的问题,但是如何存储两者呢?例如,我将创建具有两列的posts DB 表:body_bbcode 和body_html。

在body_bbcode 中,我将存储用户(论坛成员)提交的原始帖子,在body_html 中,我将存储该帖子的解析(HTML)版本。

因此,为了显示论坛帖子,我会使用body_html,但对于编辑和引用(用引用回复)我会使用body_bbcode。

我之所以要这样做是因为解析器使用的是正则表达式,并且没有body_html,它需要为每个主题页面转换至少15 个论坛帖子。如果我错了,请纠正我,但这会导致性能问题?

另一方面,我没有看到有人这样做,所以我想知道这种方法除了在数据库中占用更多空间之外还有什么缺点?

另外,我正在考虑添加一个新列,我将在其中存储纯文本版本以用于搜索目的,这样标签本身就不会被搜索(例如body_text)。

【问题讨论】:

  • 为什么需要将实际的 HTML 存储到数据库中?实际的 HTML 在所有论坛成员中都是静态的。您只需要存储“帖子”或“文本”并解析 BBC 对吗?
  • @Tony 有解释但你显然没看过:The reason why I want to do this is because the parser is using regex and without body_html it would need to convert at least 15 forum posts per topic page. Correct me if I'm wrong, but that can cause performance issues?
  • “如果我错了,请纠正我,但这会导致性能问题?” - 可以吗?您是否对此进行了测试并测量了实际问题?这些性能问题值得在多个地方存储相同数据的复杂性吗?在我看来,您希望更喜欢存储原始支持数据并即时对该数据执行计算/替换。确实有种情况会以性能换取复杂性,但在这样做之前肯定应该衡量性能。
  • 所以这是个坏主意。我会告诉你为什么...我们使用第三方的软件。第三方认为将原始 XML 数据存储到数据库中是一个“好主意”。现在我们的数据库大小超过 22GB,其中一半(实际上是 11GB)是一张表。您可能会看到在 15 个帖子上运行 regex 时出现微小的性能问题,但想想几年后您的数据库非常大的时候。 不要这样做。使用正则表达式并优化其性能。
  • “如果我错了,请纠正我,但这会导致性能问题?”:是的,也不是,您必须考虑到您的服务器也可以使用缓存系统。

标签: php regex parsing forum bbcode


【解决方案1】:

我想这样做的原因是因为解析器使用的是正则表达式并且没有 body_html 它需要为每个主题页面转换至少 15 个论坛帖子。如果我错了,请纠正我,但这会导致性能问题?

设计良好的 bbcode 正则表达式不会以任何有意义的方式影响性能。

不要为 bbcode 文本和 html 文本创建“重复”列。

您在建议的方法中遇到的一个主要问题是您将不可避免地更改您的 html 代码。 (例如,向 html 链接添加一个类,更改 youtube 嵌入的 iframe 尺寸等。)然后你会被困在尝试更新 html 列中的数据,这将是有问题的。

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2011-02-08
    • 2013-08-27
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多