做个md5查询站(3)数据格式
上次的测试显示:当数据达到1,679,062时,整个primary的文件达到了176M。
也就是说,每一万数据1M,10条数据1K,1条数据100字节,
反向算一下,一条数据由一个32位字符串和一个16位字符串及各自相应的两个字符构成,估且算做8位,那么,
一条数据占有空间应该不少于:32+16+8x2=64,如果再加上字段与记录的分隔符的话,应该有70字节以上。
加上索引和primary中的各种其它信息,差不多了吧。
这时候就会想到:char字段实在是太浪费空间了。
根据MD5码的特点,还是用最原始的方案:二进制(binary)来保存数据。
MD5本身就是一个16进制的字符串,以二进制保存应该是最省空间的做法了,一个进六进制数,比如“A”,以char保存的话要用掉一个字节,也就是8bytes,而如果以二进制保存的话,编码为1010,只用了4bytes,如此一来,密文的存储量降低了一倍。
再者:三位的所有数据加起来已达到830,584条{(26+26+32+10)的3次方},83万如果按原来的方法存储,可能要用掉90M的空间。
这时如果明文字段可以用char(3)来代替原来的char(8),也能省去不少的空间。
这样算下来,一条数据占有的空间变为:16+8+3x2=30,少了一半,。
于是建表:
CREATE TABLE [dbo].[MD516](
[md5hash] [binary](8) NOT NULL,
[md5key] [char](3) NOT NULL,
CONSTRAINT [PK_MD516] PRIMARY KEY CLUSTERED
(
[md5hash] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[MD532](
[md5hash] [binary](16) NOT NULL,
[md5key] [char](3) NOT NULL,
CONSTRAINT [PK_MD532] PRIMARY KEY CLUSTERED
(
[md5hash] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
[md5hash] [binary](8) NOT NULL,
[md5key] [char](3) NOT NULL,
CONSTRAINT [PK_MD516] PRIMARY KEY CLUSTERED
(
[md5hash] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[MD532](
[md5hash] [binary](16) NOT NULL,
[md5key] [char](3) NOT NULL,
CONSTRAINT [PK_MD532] PRIMARY KEY CLUSTERED
(
[md5hash] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
写入数据的部分略掉了,最后将3位以下的所有组合都入库了。
整个数据库60M,有839,514条记录。总算是比最初的设计小了一些了,但是如果要录入四位的,约有8千万,单表已经乏力,下回再说分表那点事。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?