zoukankan      html  css  js  c++  java
  • 做个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](8NOT NULL,
     
    [md5key] [char](3NOT 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  = ONON [PRIMARY]
    ON [PRIMARY]

    CREATE TABLE [dbo].[MD532](
     
    [md5hash] [binary](16NOT NULL,
     
    [md5key] [char](3NOT 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  = ONON [PRIMARY]
    ON [PRIMARY]

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

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

  • 相关阅读:
    CSS外边距的合并
    四大主流浏览器内核
    ViewPort视口
    url、src、href定义以及使用区别
    Debug和Release区别
    基线概念
    浅谈C#循环控制流程语句(web前端基础)
    With you With me
    css元素内容基础
    年轻人有梦想,老人有回忆
  • 原文地址:https://www.cnblogs.com/fhmsha/p/1335981.html
Copyright © 2011-2022 走看看