做個md5查詢站 2 初步設計

2021-09-05 19:50:06 字數 3143 閱讀 4788

如何儲存大規模資料?做這乙個事情之前當然要好好的做一下規劃,共做兩個表,乙個儲存16位的密文,乙個儲存32位的密文。

欄位也簡單,乙個密文,乙個明文,用char來存放,以密文為主鍵:

create

table

[dbo].

[md516](

[md5hash][

char](

16) collate chinese_prc_ci_as 

notnull,[

md5key][

char](

8) collate chinese_prc_ci_as 

null

,constraint

[pk_md516

]primary

keyclustered([

md5hash

]asc

)with

(pad_index  

=off

, ignore_dup_key 

=off

) on

[primary]) 

on[primary

]create

table

[dbo].

[md532](

[md5hash][

char](

32) collate chinese_prc_ci_as 

notnull,[

md5key][

char](

8) collate chinese_prc_ci_as 

null

,constraint

[pk_md516

]primary

keyclustered([

md5hash

]asc

)with

(pad_index  

=off

, ignore_dup_key 

=off

) on

[primary]) 

on[primary]

寫乙個插入資料的儲存過程:

create

procedure

[dbo].

[p_insert_md5

]@md5key

char(8

),@md516

char(16

),@md532

char(32

)asbegin

setnocount on;

insert

into

[md5].

[dbo].

[md532](

[md5hash],

[md5key])

values

(@md532

,@md5key)if

@@error

<>

0begin

insert

into

[md5].

[dbo].

[md5error](

[md5char],

[md5key])

values

(@md532

,@md5key

)end

insert

into

[md5].

[dbo].

[md516](

[md5hash],

[md5key])

values

(@md516

,@md5key)if

@@error

<>

0begin

insert

into

[md5].

[dbo].

[md5error](

[md5char],

[md5key])

values

(@md516

,@md5key

)end

end

再寫乙個迴圈來生成並寫入密文及對應值:

string

connstr 

=configurationmanager.connectionstrings[

"md5

"].connectionstring;

for(

inti =1

; i 

<

1000000

; i++

=new

sqlconnection(connstr);

string

sqlstr 

=string

.format(

"exec p_insert_md5 '','',''",

i.tostring(), chartomd5.tomd5(i.tostring(), 

false

).tolower(), chartomd5.tomd5(i.tostring()).tolower());

//沒有過濾特殊符號

sqlcommand cmd 

=new

sqlcommand(sqlstr, conn);

cmd.commandtype 

=commandtype.text;

trycatch

finally

this

.text 

=sqlstr;

chartomd5是我自己寫的乙個生成md5的函式,朋友可以自己寫這個function。

經試驗,資料庫果然沒有想像的那樣好用,當資料達到1,679,062時,整個primary的檔案達到了176m,其中16位密文表佔64m,32位密文表佔96m。

這裡還有另外乙個問題,當資料過百萬時,sqlserver的查詢效率就會變慢,特別是對於char型的資料來說要比我們通常用的int型慢很多。

由於密文是主鍵,又是char型,還面臨著龐大的索引資料,16位密文表佔了0.313 mb,32位密文表佔了0.734 mb。

通常我們的**承載的資料如果上萬就是很多了,初級的資料庫程式設計師一般不會考慮百萬和千萬級資料庫的設計問題,因為一般也達不到,專案就挎掉了。

如何處理海量資料,網上找一找其實有很多方法:優化資料,合理安排索引,多表分割槽,多分割槽表,檔案系統,伺服器分布系統等等,想要學會這些東西往往要等到真正遇到了這樣的問題才會認真的去學習。現在,看看手中的資料庫,想想有什麼辦法可以用的?

做個md5查詢站 1 從8年前說開去

說起md5,最早接觸是8年前了,當時還是主要以爆破為主,即使是簡單的明文也很難通過這種方式獲取到。當時最流行的 洞 網論壇全採用一次md5加密,其它一些軟體作者也普遍採用這種演算法,有報道稱md5雖然超期服役,但在一定時期內還是安全的。時間刷刷的過去了,今天再來看看md5,網上逐步出現了一些查詢類的...

MD5加密演算法2

md5的全稱是message digest algorithm 5 資訊 摘要演算法 在90年代初由 mit laboratory for computer science和rsa data security inc的ronald l.rivest開發出來,經md2 md3和md4發展而來。它的作用...

(2)雜湊函式之MD5演算法

常見的雜湊函式包括 md5,sha 1,sha 256,sha 512 等,今天講一下md5演算法 md5 演算法,又稱訊息摘要演算法,是一種被廣泛使用的密碼雜湊函式,可以產生出乙個 128 位 16 位元組 的雜湊值 hash value 用於確保資訊傳輸完整一致。md5 由美國密碼學家羅納德 李...