当前位置: 首页 > news >正文

做个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 ]

 

写入数据的部分略掉了,最后将3位以下的所有组合都入库了。

整个数据库60M,有839,514条记录。总算是比最初的设计小了一些了,但是如果要录入四位的,约有8千万,单表已经乏力,下回再说分表那点事。

相关文章:

  • C语言博客作业06--结构体文件
  • 事件类型
  • 英语数字读法
  • bootstrp的datetimepicker插件获取选定日期
  • 08年cpu
  • VMware网络适配器的选择
  • 三、MyBatis-全局配置文件
  • Legato Backup Server DR SOP
  • HDFS,MongoDB,HBase的区别和使用场景
  • WinAVI Video Converter v8.0 注册码
  • 不利用C语言库函数,实现字符串相关函数
  • 中午又可以打篮球了
  • UI框架
  • 中央气象台发寒潮橙色警报 将现大范围大风降温
  • Visual Studio 2017打包安装项目
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • co.js - 让异步代码同步化
  • Docker容器管理
  • E-HPC支持多队列管理和自动伸缩
  • emacs初体验
  • ES学习笔记(12)--Symbol
  • Intervention/image 图片处理扩展包的安装和使用
  • leetcode388. Longest Absolute File Path
  • vue 个人积累(使用工具,组件)
  • Vue2.0 实现互斥
  • Vue学习第二天
  • Web标准制定过程
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端之Sass/Scss实战笔记
  • 通信类
  • 微信公众号开发小记——5.python微信红包
  • 译有关态射的一切
  • 用mpvue开发微信小程序
  • 责任链模式的两种实现
  • 走向全栈之MongoDB的使用
  • 最近的计划
  • Mac 上flink的安装与启动
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $forceUpdate()函数
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (9)目标检测_SSD的原理
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十)T检验-第一部分
  • (五)Python 垃圾回收机制
  • (一)基于IDEA的JAVA基础12
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)视频码率,帧率和分辨率的联系与区别
  • .apk 成为历史!