做个md5查询站(2)初步设计
如何存储大规模数据?做这一个事情之前当然要好好的做一下规划,共做两个表,一个存储16位的密文,一个存储32位的密文。
字段也简单,一个密文,一个明文,用char来存放,以密文为主键:
CREATE TABLE [dbo].[MD516](
[md5hash] [char](16) COLLATE Chinese_PRC_CI_AS NOT NULL,
[md5key] [char](8) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_MD516] PRIMARY KEY CLUSTERED
(
[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 NOT NULL,
[md5key] [char](8) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_MD516] PRIMARY KEY CLUSTERED
(
[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)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [md5].[dbo].[MD532]
([md5hash]
,[md5key])
VALUES
(@md532
,@md5key)
IF @@ERROR <>0
BEGIN
INSERT INTO [md5].[dbo].[MD5ERROR]
([md5char],[md5key])
VALUES
(@md532 ,@md5key)
END
INSERT INTO [md5].[dbo].[MD516]
([md5hash],[md5key])
VALUES
(@md516,@md5key)
IF @@ERROR <>0
BEGIN
INSERT INTO [md5].[dbo].[MD5ERROR]
([md5char],[md5key])
VALUES
(@md516,@md5key)
END
END
再写一个循环来生成并写入密文及对应值:
string connstr = ConfigurationManager.ConnectionStrings["md5"].ConnectionString;
for (int i = 1; i < 1000000; i++) {
Application.DoEvents();
SqlConnection conn = new SqlConnection(connstr);
string sqlstr = string.Format("exec P_INSERT_MD5 '{0}','{1}','{2}'",
i.ToString(), CharToMD5.ToMD5(i.ToString(), false).ToLower(), CharToMD5.ToMD5(i.ToString()).ToLower());
//没有过滤特殊符号
SqlCommand cmd = new SqlCommand(sqlstr, conn);
cmd.CommandType = CommandType.Text;
try {
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
catch { }
finally {
cmd.Connection.Close();
}
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查询站(2)初步设计相关推荐
- [转贴]现在在做一个WEB的站内消息系统,从工具栏位置弹出一徐徐上升的窗口...
现在在做一个WEB的站内消息系统, 想在用户登陆时, 如果有未读短消息 则从工具栏位置弹出一徐徐上升的窗口 显示提醒信息! <script language="JavaScript&q ...
- iOS ReactiveCocoa 最全常用API整理(可做为手册查询)
本文出出http://www.code4app.com/blog-721976-195.html 本文适合有一定RAC基础的童鞋做不时的查询,所以本文不做详细解释. 一.常见类 1.RACSiganl ...
- 为什么要做巧推整站快速排名SEO优化?
如标题抛出一个疑问,为什么要做巧推整站快速排名seo.qt99.cn相信很多企业和公司都会有同感,公司让人把公司官网给搭建起来,产品信息和公司新闻也天天更新,但是就是没带来实质性的流量和排名,往往这样 ...
- C#调用12306API做余票查询
本文叙述的是使用C#调用12306的API做余票查询程序的方法. 先看一下程序运行截图.本程序使用WPF. 1. 了解12306API 登陆12306网站,点击余票查询,我们查询从北京到上海的火车票. ...
- 简单的MD5查询工具
这是一个MD5查询工具,输入将要加密的字符串,可以查询到其MD5值. 目前提供了32位和16位两种算法. 什么是MD5? Message Digest Algorithm MD5(中文名为消息摘要算法 ...
- 定位做白领的能量站,中餐标准化便当品牌熙香完成1.2亿元B轮融资
10月15日消息,便当品牌"熙香"已完成1.2亿元B轮融资,投资方为天堂硅谷和中金资本.据悉,本轮融资资金将用于门店扩张.无人厨房研发和标准化供应链打造. 此前,熙香曾获得来自纽信 ...
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- Java使用多线程做批处理(查询大量数据)
Java使用多线程做批处理(查询大量数据) Java使用多线程做批处理(查询大量数据) Java使用多线程做批处理(查询大量数据) 前言背景 Java使用多线程的条件 操作流程 前言背景 什么是进程: ...
- 伪原创视频怎么做 视频md5修改批量修改器
伪原创视频怎么做 视频md5修改批量修改器 所以当我们制作发布短视频的时候,要想办法提升评论互动量,或者前期专门做一些评论互动型视频,让更多的用户参与进来. ...
最新文章
- python快乐编程—基础入门-Python零基础快乐学习之旅(K12实战训练)
- IPv6套接字编程介绍
- 动态规划解题思路与总结(三万字)
- java 方法 示例_Java集合syncedList()方法与示例
- JAVA 【引用类型】和【对象类型】在【继承】中的异同
- 李开复 —— 给中国学生的第四封信:大学四年应是这样度过
- 阿里技术参考图册-研发篇
- XHTML学习资料(三)—— 表格
- Uber的微服务架构实践
- Python的学习必备基础知识总结
- mysql数据类型强转
- 发那科机器人圆弧指令怎么用_发那科机器人应用-运动指令入门(1)
- SQLServer中的 dbo
- android锁机如何制作教程视频教程,Android一枚简单锁机样本的测试与浅析
- 不离不弃共赴鸿蒙什么意思,鸿蒙是什么意思 “道起鸿蒙”是什么意思,有何典故,语出何处?...
- 在kaggle的论坛上上传图片
- Java开发教程入门!数据库事务深入分析
- 翻译:数据页面和数据行
- 高通物联网智能WIFI芯片-QCA4002/QCA4004
- Dockerfile unable to access ‘.git/‘: Failed to connect to gitlab.com