【发布时间】:2012-04-09 08:16:02
【问题描述】:
我使用的是 OLAP 系统,有些表格有文本字段。文本长度可以从一些字节到KB,而一行中其他固定大小字段的大小只有100字节左右。
我的一些表有数十亿行,文本字段的值是高度可重复的,如何减少这种冗余以节省存储空间并且不损失查询性能?
【问题讨论】:
标签: database olap redundancy
我使用的是 OLAP 系统,有些表格有文本字段。文本长度可以从一些字节到KB,而一行中其他固定大小字段的大小只有100字节左右。
我的一些表有数十亿行,文本字段的值是高度可重复的,如何减少这种冗余以节省存储空间并且不损失查询性能?
【问题讨论】:
标签: database olap redundancy
冗余是数据库工作中的一个技术术语。这并不意味着“重复”。它的意思是“不必要的重复”。您可能没有任何不必要的重复;每个值都需要在自己的行中,以便向用户传达正确的含义。
有时,您可以用更短的可读代码替换现有值。更短的代码生成更窄的表,这意味着数据库中每页的行数更多,I/O 更快。例如,在美国,我们经常使用州的两个字母的邮政编码而不是州的全名。这几乎总是有效的。 (这意味着人类无需进一步处理即可读取输出,并且查询运行速度至少要快一点。)
有时,您可以用代理键替换现有值,希望额外连接的成本会被更快的磁盘 I/O 所抵消。有时这种策略不起作用;您需要进行测试并准备好恢复到您的原始架构。
【讨论】:
http://www. 替换为空。不以 http://www. 开头的 URL 需要在输出时将该字符串附加到其前面。
报告数据库中的 URL 之前给我带来了麻烦。可能值得尝试的是将 URL 拆分为 3 部分 - 主机名/端口、路径和查询字符串 - 您最终可能会得到一个 url-fragment 表(可能不止一个),以及一个带有 URL 的 FK 的 URL 表 -片段表。有时查询字符串不值得单独存储,在这种情况下,URL 表具有主机名和路径的 FK,并存储查询字符串。
另一个想法是删除查询字符串中无用的部分 - 这个决定需要在逐个应用程序的基础上进行,但可以产生很大的不同 - 从 URL 中删除会话 ID 可以显着改善事情(此外,您可以可能会删除谷歌分析参数。
此外,仅在需要时访问 URL 表,并确保至少对主机名有索引。
【讨论】: