gpt4 book ai didi

mysql - url 文本压缩(不是缩短)并存储在 mysql 中

转载 作者:可可西里 更新时间:2023-11-01 07:57:17 32 4
gpt4 key购买 nike

我在 mysql 中有一个 url 表,它只有两个字段 id 和 varchar(255) 作为 url。目前那里有超过 5000 万个 url,我的老板刚刚给我提供了关于我们当前项目扩展的线索,这将导致在该 url 表中添加更多的 url,预计到 2019 年中期的数量大约为 1.5 亿个明年。

目前数据库大小约为 6GB,所以我可以肯定地说,如果事情保持不变,那么它将超过 20GB,这并不好。所以,我正在考虑一些可以减少 url 存储磁盘空间的解决方案。

我也想说明一下,这个表不是一个繁忙的表,目前没有太多的查询,所以我只是想节省磁盘空间,更重要的是我想探索短文本的新想法压缩及其在mysql中的存储

但将来也可以大量访问该表,因此最好在时机成熟之前优化该表。

我花了很多功夫将 url 更改为数字形式并使用 BIGINT 进行存储,但由于它有 64 位的限制,所以效果不是很好。同样是 BIT 数据类型的问题,也施加了 64 位的限制。

我转换为数字形式的想法基本上是因为 8 字节 BIGINT 存储 19 个数字,所以如果每个数字指向所有可能字符的字符集中的一个字符,那么它可以在 8 个字节中存储 19 个字符,如果所有字符的范围是 1- 10 但在现实世界中有 52 个英文字符和 10 个数字加上一些符号,所以它大约有 100 个字符集。因此,在最坏的情况下,BIGINT 仍然可以指向 6 个字符,是的,它不是最终裁决,它仍然需要一些锻炼才能准确知道每个数字指向的是 10+ 数字还是 30+ 数字或 80+ 数字,但你有几乎明白我在想什么。

更重要的是,由于 url 是可变长度的,所以我也试图节省小 url 的磁盘空间,所以我不想提供固定长度的列类型。

我还研究了一些文本压缩算法,如 smaz 和 Huffman 压缩算法,但不太相信,因为它们使用某种字典单词,但我正在寻找一种干净的方法。

而且我不想使用二进制数据类型,因为它也像字节中的 varchars 一样占用太多空间。

最佳答案

另一个尝试的想法可能是识别常见字符串并用位图表示它们。例如,有两位表示协议(protocol)(http、https、ftp 或其他),另一位表示域名是否以“wwww”开头,两位表示域名是否以“.com”、“. org”、“.edu”或其他名称。您必须对您的数据进行一些分析,看看这些是否有意义,以及您是否可以识别任何其他常见字符串。

如果您有很多指向同一站点的 URL,您还可以考虑将您的表分成两个不同的表,一个包含域,另一个包含域相对路径(以及查询字符串和片段 ID,如果存在的话) ).您将有一个链接表,其中包含 URL 的 ID、域的 ID 和路径的 ID,并且您将用连接这三个表的 View 替换原始 URL 表。域表不必限于域,您可以包含尽可能多的常见 URL(例如,“http://stackoverflow.com/questions”)。这不会花费太多代码来实现,并且具有仍然可读的优点。您的数字编码可能会更有效,一旦您弄明白了,您将不得不分析您的数据以查看哪个更有意义。

关于mysql - url 文本压缩(不是缩短)并存储在 mysql 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7391839/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com