草庐IT

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

coder 2023-10-17 原文

我在 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/

有关mysql - url 文本压缩(不是缩短)并存储在 mysql 中的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  4. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  5. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  6. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  7. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  8. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  9. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  10. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

随机推荐