【问题标题】:How to reduce data redundancy of text field in database如何减少数据库中文本字段的数据冗余
【发布时间】:2012-04-09 08:16:02
【问题描述】:

我使用的是 OLAP 系统,有些表格有文本字段。文本长度可以从一些字节到KB,而一行中其他固定大小字段的大小只有100字节左右。

我的一些表有数十亿行,文本字段的值是高度可重复的,如何减少这种冗余以节省存储空间并且不损失查询性能?

【问题讨论】:

    标签: database olap redundancy


    【解决方案1】:

    冗余是数据库工作中的一个技术术语。这并不意味着“重复”。它的意思是“不必要的重复”。您可能没有任何不必要的重复;每个值都需要在自己的行中,以便向用户传达正确的含义。

    有时,您可以用更短的可读代码替换现有值。更短的代码生成更窄的表,这意味着数据库中每页的行数更多,I/O 更快。例如,在美国,我们经常使用州的两个字母的邮政编码而不是州的全名。这几乎总是有效的。 (这意味着人类无需进一步处理即可读取输出,并且查询运行速度至少要快一点。)

    有时,您可以用代理键替换现有值,希望额外连接的成本会被更快的磁盘 I/O 所抵消。有时这种策略不起作用;您需要进行测试并准备好恢复到您的原始架构。

    【讨论】:

    • 谢谢,实际上,我的值是一些 url 字符串,它以低频率重复,例如每次 10~100 次(不像邮政编码那么多)。我想减少它们的原因是这些值占用了我大部分的存储空间,这意味着如果我可以将重复值减少为一个,它将节省高达 80% 的磁盘空间。我尝试使用您所说的键值存储,并在查询进入时进行了联接。但是它会导致大量随机访问用于添加键值存储,这使得查询性能下降很多。有什么我可以在这里做的优化工作吗?
    • a) 要缩短 URL,您可以使用 tinyurlbitlyGoogle URL shortener 等服务。 b)您也许可以将http://www. 替换为空。不以 http://www. 开头的 URL 需要在输出时将该字符串附加到其前面。
    【解决方案2】:

    报告数据库中的 URL 之前给我带来了麻烦。可能值得尝试的是将 URL 拆分为 3 部分 - 主机名/端口、路径和查询字符串 - 您最终可能会得到一个 url-fragment 表(可能不止一个),以及一个带有 URL 的 FK 的 URL 表 -片段表。有时查询字符串不值得单独存储,在这种情况下,URL 表具有主机名和路径的 FK,并存储查询字符串。

    另一个想法是删除查询字符串中无用的部分 - 这个决定需要在逐个应用程序的基础上进行,但可以产生很大的不同 - 从 URL 中删除会话 ID 可以显着改善事情(此外,您可以可能会删除谷歌分析参数。

    此外,仅在需要时访问 URL 表,并确保至少对主机名有索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多