新聞中心
隨著電商平臺(tái)的普及和消費(fèi)者需求的增加,秒殺活動(dòng)成為了越來(lái)越多電商平臺(tái)的必備活動(dòng)。然而,通過(guò)研究發(fā)現(xiàn),大量的訪問(wèn)和請(qǐng)求會(huì)給系統(tǒng)造成嚴(yán)重的壓力,導(dǎo)致服務(wù)器崩潰和用戶體驗(yàn)差。

創(chuàng)新互聯(lián)長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為魏縣企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),魏縣網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
為了保證秒殺活動(dòng)的順利進(jìn)行,設(shè)計(jì)一個(gè)高效可靠的數(shù)據(jù)庫(kù)是至關(guān)重要的。本文將探討如何設(shè)計(jì)秒殺模塊的數(shù)據(jù)庫(kù)以提高系統(tǒng)效率和運(yùn)行穩(wěn)定性。
1. 數(shù)據(jù)庫(kù)選擇
在設(shè)計(jì)秒殺模塊的數(shù)據(jù)庫(kù)時(shí),我們要選擇一個(gè)高性能、高可用性的數(shù)據(jù)庫(kù)。在使用數(shù)據(jù)庫(kù)時(shí),我們要特別注意以下幾個(gè)方面:
a) 數(shù)據(jù)庫(kù)連接數(shù)
數(shù)據(jù)庫(kù)連接數(shù)是指在同一時(shí)刻可與數(shù)據(jù)庫(kù)建立的連接數(shù)目。因此,我們需要設(shè)置合理的連接數(shù)以避免系統(tǒng)崩潰。建議采用連接池來(lái)解決高并發(fā)請(qǐng)求的問(wèn)題。
b) 內(nèi)存管理
在數(shù)據(jù)庫(kù)運(yùn)行中,內(nèi)存管理是非常重要的。因此,我們需要合理地分配內(nèi)存,確保數(shù)據(jù)庫(kù)的運(yùn)行效率。
c) 數(shù)據(jù)庫(kù)選型
在設(shè)計(jì)秒殺模塊的數(shù)據(jù)庫(kù)時(shí),我們要選擇一款效率高、性能好的數(shù)據(jù)庫(kù)。目前更流行的關(guān)系型數(shù)據(jù)庫(kù)是MySQL和Oracle,非關(guān)系型數(shù)據(jù)庫(kù)中更流行的是MongoDB和Redis。
2. 數(shù)據(jù)庫(kù)設(shè)計(jì)
在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),我們要遵循以下幾個(gè)原則:
a) 冗余處理
冗余處理可以提高系統(tǒng)的運(yùn)行效率。例如,在秒殺模塊中,我們可以將商品數(shù)量寫(xiě)在商品表里,同時(shí)將緩存中的商品數(shù)量實(shí)時(shí)更新,使庫(kù)存數(shù)據(jù)實(shí)時(shí)的與實(shí)際數(shù)據(jù)一致。
b) 數(shù)據(jù)庫(kù)分表
在高并況下,數(shù)據(jù)的查詢和更新需要更快的效率。因此,采用數(shù)據(jù)庫(kù)分表的方法,可以各個(gè)擊破,提高查詢效率。
c) 數(shù)據(jù)緩存
數(shù)據(jù)緩存可以提高系統(tǒng)運(yùn)行效率。將熱門(mén)數(shù)據(jù)、用戶信息等緩存到內(nèi)存中,可以大大減少數(shù)據(jù)庫(kù)查詢次數(shù),提高系統(tǒng)效率。
3. 數(shù)據(jù)庫(kù)優(yōu)化
在數(shù)據(jù)庫(kù)運(yùn)行中,我們要注意以下幾個(gè)方面:
a) 查詢優(yōu)化
快速的查詢速度有利于系統(tǒng)運(yùn)行效率。優(yōu)化查詢語(yǔ)句、建立索引、減少無(wú)效查詢都是加快查詢速度的有效措施。
b) 預(yù)編譯語(yǔ)句
使用預(yù)編譯語(yǔ)句可以避免重復(fù)編譯語(yǔ)句,提高系統(tǒng)效率。
c) 事務(wù)管理
事務(wù)管理是保證數(shù)據(jù)庫(kù)運(yùn)行穩(wěn)定性的關(guān)鍵。合理的事務(wù)控制可以減少數(shù)據(jù)丟失、重復(fù)提交等問(wèn)題的發(fā)生。
結(jié)論:
對(duì)于一個(gè)秒殺模塊來(lái)說(shuō),設(shè)計(jì)高效可靠的數(shù)據(jù)庫(kù)非常關(guān)鍵。通過(guò)上述措施,我們可以有效的提高系統(tǒng)的運(yùn)行效率,保證活動(dòng)的順利進(jìn)行。雖然數(shù)據(jù)庫(kù)設(shè)計(jì)需要大量的工作,但如果關(guān)注好每一個(gè)細(xì)節(jié),最終的結(jié)果一定是值得的。
相關(guān)問(wèn)題拓展閱讀:
- 數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì),常見(jiàn)的數(shù)據(jù)庫(kù)管理系統(tǒng)
- 在系統(tǒng)設(shè)計(jì)中,對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)應(yīng)考慮哪些設(shè)計(jì)原則?
數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì),常見(jiàn)的數(shù)據(jù)庫(kù)管理系統(tǒng)
一、數(shù)據(jù)場(chǎng)景 1、表結(jié)構(gòu)簡(jiǎn)介 任何工具類的東西都是為了解決某個(gè)場(chǎng)景下的問(wèn)題,比如Redis緩存系統(tǒng)熱點(diǎn)數(shù)據(jù),ClickHouse解決海量數(shù)據(jù)的實(shí)時(shí)分析,MySQL關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。數(shù)據(jù)的存儲(chǔ)則需要設(shè)計(jì)對(duì)應(yīng)的表結(jié)構(gòu),清楚的表結(jié)構(gòu),有助于快速開(kāi)發(fā)業(yè)務(wù),和理解系統(tǒng)。表結(jié)構(gòu)的設(shè)計(jì)通常從下面幾個(gè)方面考慮:業(yè)務(wù)場(chǎng)景、設(shè)計(jì)規(guī)范、表結(jié)構(gòu)、字段屬性、數(shù)據(jù)管理。
2、用戶場(chǎng)景
例如存儲(chǔ)用戶基礎(chǔ)信息數(shù)據(jù),通常都會(huì)下面幾個(gè)相關(guān)表結(jié)構(gòu):用戶信息表、單點(diǎn)登錄表、狀態(tài)管理表、支付賬戶表等。
用戶信息表
存儲(chǔ)用戶三要素相關(guān)信息:姓名,手機(jī)號(hào),身份證,登錄密碼,郵箱等。
CREATE TABLE `ms_user_center` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘用戶ID’, `user_name` varchar(20) NOT NULL COMMENT ‘用戶名’, `real_name` varchar(20) DEFAULT NULL COMMENT ‘真實(shí)姓名’, `pass_word` varchar(32) NOT NULL COMMENT ‘密碼’, `phone` varchar(20) NOT NULL COMMENT ‘手機(jī)號(hào)’, `email` varchar(32) DEFAULT NULL COMMENT ‘郵箱’, `head_url` varchar(100) DEFAULT NULL COMMENT ‘用戶頭像URL’, `card_id` varchar(32) DEFAULT NULL COMMENT ‘身份證號(hào)’, `user_sex` int(1) DEFAULT ‘1’ COMMENT ‘用戶性別:0-女,1-男’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時(shí)間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時(shí)間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶表’; 單點(diǎn)登錄表
用意是在多個(gè)業(yè)務(wù)系統(tǒng)中,用戶登錄一次就可以訪問(wèn)所有相互信任的業(yè)務(wù)子系統(tǒng),是聚合業(yè)務(wù)平臺(tái)常用的解決方案。
CREATE TABLE `ms_user_sso` ( `user_id` int(11) NOT NULL COMMENT ‘用戶ID’, `sso_id` varchar(32) NOT NULL COMMENT ‘單點(diǎn)信息編號(hào)ID’, `sso_code` varchar(32) NOT NULL COMMENT ‘單點(diǎn)登錄碼,唯一核心標(biāo)識(shí)’, `log_ip` varchar(32) DEFAULT NULL COMMENT ‘登錄IP地址’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時(shí)間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時(shí)間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶單點(diǎn)登錄表’; 狀態(tài)管理表
系統(tǒng)用戶在使用時(shí)候可能出現(xiàn)多個(gè)狀態(tài),例如賬戶凍結(jié)、密碼鎖定等,把狀態(tài)聚合到一起,可以更加方便的管理和驗(yàn)證。
CREATE TABLE `ms_user_status` ( `user_id` int(11) NOT NULL COMMENT ‘用戶ID’, `account_status` int(1) DEFAULT ‘1’ COMMENT ‘賬戶狀態(tài):0-凍結(jié),1-未凍結(jié)’, `real_name_status` int(1) DEFAULT ‘0’ COMMENT ‘實(shí)名認(rèn)證狀態(tài):0-未實(shí)名,1-已實(shí)名’, `pay_pass_status` int(1) DEFAULT ‘0’ COMMENT ‘支付密碼是否設(shè)置:0-未設(shè)置,1-設(shè)置’, `wallet_pass_status` int(1) DEFAULT ‘0’ COMMENT ‘錢(qián)包密碼是否設(shè)置:0-未設(shè)置,1-設(shè)置’, `wallet_status` int(1) DEFAULT ‘1’ COMMENT ‘錢(qián)包是否凍結(jié):0-凍結(jié),1-未凍結(jié)’, `email_status` int(1) DEFAULT ‘0’ COMMENT ‘郵箱狀態(tài):0-未激活,1-激活’, `message_status` int(1) DEFAULT ‘1’ COMMENT ‘短信提醒開(kāi)啟:0-未開(kāi)啟,1-開(kāi)啟’, `letter_status` int(1) DEFAULT ‘1’ COMMENT ‘站內(nèi)信提醒開(kāi)啟:0-未開(kāi)啟,1-開(kāi)啟’, `emailmsg_status` int(1) DEFAULT ‘0’ COMMENT ‘郵件提醒開(kāi)啟:0-未開(kāi)啟,1-開(kāi)啟’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時(shí)間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時(shí)間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶狀態(tài)表’; 支付賬戶表
用戶交易的核心表,存儲(chǔ)用戶相關(guān)的賬戶資金信息。
CREATE TABLE `ms_user_wallet` ( `wallet_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘錢(qián)包ID’, `user_id` int(11) NOT NULL COMMENT ‘用戶ID’, `wallet_pwd` varchar(32) DEFAULT NULL COMMENT ‘錢(qián)包密碼’, `total_account` decimal(20,2) DEFAULT ‘0.00’ COMMENT ‘賬戶總額’, `usable_money` decimal(20,2) DEFAULT ‘0.00’ COMMENT ‘可用余額’, `freeze_money` decimal(20,2) DEFAULT ‘0.00’ COMMENT ‘凍結(jié)金額’, `freeze_time` datetime DEFAULT NULL COMMENT ‘凍結(jié)時(shí)間’, `thaw_time` datetime DEFAULT NULL COMMENT ‘解凍時(shí)間’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時(shí)間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時(shí)間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`wallet_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶錢(qián)包’; 二、設(shè)計(jì)規(guī)范 1、涉及模塊
通過(guò)上面幾個(gè)表設(shè)計(jì)的案例,可以看到表設(shè)計(jì)關(guān)聯(lián)到數(shù)據(jù)庫(kù)的各個(gè)方面知識(shí):數(shù)據(jù)類型,索引,編碼,存儲(chǔ)引擎等。表設(shè)計(jì)是一個(gè)很大的命題,不過(guò)也遵循一個(gè)基本規(guī)范:三范式。
2、三范式 基礎(chǔ)概念
一范式
表的列的具有原子性,不可再分解,即列的信息,不能分解,關(guān)系型數(shù)據(jù)庫(kù)MySQL、Oracle等自動(dòng)的滿足。
二范式
每個(gè)事實(shí)的數(shù)據(jù)記錄只會(huì)出現(xiàn)一次, 不會(huì)冗余, 通常設(shè)計(jì)一個(gè)主鍵來(lái)實(shí)現(xiàn)。
三范式
要求一個(gè)表中不包含已經(jīng)存在于其它表的非主鍵信息,例如部門(mén)和員工的信息,員工表包含部門(mén)表的主鍵ID,則可以關(guān)聯(lián)獲取相關(guān)信息,沒(méi)必要在員工表保存相關(guān)信息。
優(yōu)缺點(diǎn)對(duì)比
范式化設(shè)計(jì)
范式化結(jié)構(gòu)設(shè)計(jì)通常更新快,因?yàn)槿哂鄶?shù)據(jù)較少,表結(jié)構(gòu)輕巧,也更好的寫(xiě)入內(nèi)存中。但是查詢起來(lái)涉及到關(guān)聯(lián),代價(jià)非常高,非常損耗查詢性能。
反范式化設(shè)計(jì)
所有的數(shù)據(jù)都在一張表中,避免關(guān)聯(lián)查詢,索引的有效性更高,但是數(shù)據(jù)的冗余性極高。
建議結(jié)論
上述的兩種設(shè)計(jì)方式在實(shí)際開(kāi)發(fā)中都是不存在的,在實(shí)際開(kāi)發(fā)中都是混合使用。比如匯總統(tǒng)計(jì),緩存數(shù)據(jù),都會(huì)基于反范式化的設(shè)計(jì)。
三、字段屬性
合適的字段類型對(duì)于高性能來(lái)說(shuō)非常重要,基本原則如下:簡(jiǎn)單的類型占用資源更少;在可以正確存儲(chǔ)數(shù)據(jù)的情況下,選最小的數(shù)據(jù)類型。
1、數(shù)據(jù)類型選擇 整數(shù)類型
TINYINT、ALLINT、MEDIUMINT、INT、BIGINT,根據(jù)數(shù)據(jù)類型范圍合理選擇即可。
實(shí)數(shù)類型
FLOAT、DOUBLE、DECIMAL,建議資金貨幣相關(guān)類型使用高精度DECIMAL存儲(chǔ),或者把數(shù)據(jù)成倍擴(kuò)大為整數(shù),采用BIGINT存儲(chǔ),不過(guò)處理相對(duì)麻煩。
字符類型
CHAR、VARCHAR,長(zhǎng)度不確定建議采用VARCHAR存儲(chǔ),不過(guò)VARCHAR類型需要額外開(kāi)銷記錄字符串長(zhǎng)度。CHAR適合存儲(chǔ)短字符,或者定長(zhǎng)字符串,例如MD5的加密結(jié)構(gòu)。
時(shí)間類型
DATETIME、TIMESTAMP,DATETIME保存大范圍的值,精度秒。TIMESTAMP以時(shí)間戳的格式,范圍相對(duì)較小,效率也相對(duì)較高,所以通常情況建議使用。
MySQL的字段類型有很多種,可以根據(jù)數(shù)據(jù)特性選擇合適的,這里只描述常見(jiàn)的幾種類型。
2、基礎(chǔ)用法操作 數(shù)據(jù)類型
修改字段類型
ALTER TABLE ms_user_sso MODIFY state CHAR(1) DEFAULT ‘0’ ; ALTER TABLE ms_user_sso MODIFY state INT(1) DEFAULT ‘1’ COMMENT ‘狀態(tài):0不可用,1可用’;
修改名稱位置
ALTER TABLE ms_user_sso CHANGE log_ip login_ip VARCHAR(32) AFTER update_time ; 索引使用
索引類型:主鍵索引,普通索引,唯一索引,組合索引,全文索引。這里演示普通索引的操作。MySQL的核心模塊,后續(xù)詳說(shuō)。
添加索引
ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id) ; CREATE INDEX state_index ON ms_user_wallet(state) ;
查看索引
SHOW INDEX FROM ms_user_wallet;
刪除索引
DROP INDEX state_index ON ms_user_wallet ;
修改索引
不具有真正意義上的修改,可以把原有的索引刪除之后,再次添加索引。
外鍵關(guān)聯(lián)
用處:外鍵關(guān)聯(lián)的作用保證多個(gè)數(shù)據(jù)表的數(shù)據(jù)一致性和完整性,建表時(shí)先有主表,后有從表;刪除數(shù)據(jù)表,需要先刪從表,再刪主表。復(fù)雜場(chǎng)景不建議使用,實(shí)際開(kāi)發(fā)中用的也不多。
添加外鍵
ALTER TABLE ms_user_wallet ADD CONSTRAINT user_id_out_key FOREIGN KEY(user_id) REFERENCES ms_user_center(id) ;
刪除外鍵
ALTER TABLE ms_user_wallet DROP FOREIGN KEY user_id_out_key ; 四、表結(jié)構(gòu)管理 1、查看結(jié)構(gòu) DESC ms_user_status ; SHOW CREATE TABLE ms_user_status ; 2、字段結(jié)構(gòu) 添加字段 ALTER TABLE ms_user_status ADD `delete_time` datetime DEFAULT NULL COMMENT ‘刪除時(shí)間’ ; 刪除字段 ALTER TABLE ms_user_status DROP COLUMN delete_time ; 3、修改表名 ALTER TABLE ms_user_center RENAME ms_user_info ; 4、存儲(chǔ)引擎 存儲(chǔ)引擎 SELECT VERSION() ; SHOW ENGINES ;
MySQL 5.6 支持的存儲(chǔ)引擎有InnoDB、MyISAM、Memory、Archive、CSV、BLACKHOLE等。一般默認(rèn)使用InnoDB,支持事務(wù)管理。該模塊MySQL核心,后續(xù)詳解。
修改引擎
數(shù)據(jù)量大的場(chǎng)景下,存儲(chǔ)引擎修改是一個(gè)難度極大的操作,容易會(huì)導(dǎo)致表的特性變動(dòng),引起各種后續(xù)反應(yīng),后續(xù)會(huì)詳說(shuō)。
ALTER TABLE ms_user_sso ENGINE = MyISAM ; 5、修改編碼
表字符集默認(rèn)使用utf8,通用,無(wú)亂碼風(fēng)險(xiǎn),漢字3字節(jié),英文1字節(jié),utf8mb4是utf8的超集,有存儲(chǔ)4字節(jié)例如表情符號(hào)時(shí)使用。
查看編碼 SHOW VARIABLES LIKE ‘character%’; 修改編碼 ALTER TABLE ms_user_sso DEFAULT CHARACTER SET utf8mb4; 五、數(shù)據(jù)管理 1、增刪改查
添加數(shù)據(jù)
INSERT INTO ms_user_sso ( user_id,sso_id,sso_code,create_time,update_time,login_ip,state ) VALUES ( ‘1’,’SSO’,’SSO’, ‘:56:57′,’:57:01′,’127.0.0.1′,’1′ );
更新數(shù)據(jù)
UPDATE ms_user_sso SET user_id = ‘1’,sso_id = ‘SSO’,sso_code = ‘SSO’, create_time = ‘:56:57’,update_time = ‘:57:01’, login_ip = ‘127.0.0.1’,state = ‘1’ WHERE user_id = ‘1’;
查詢數(shù)據(jù)
一般情況下都是禁止使用 select* 操作。
SELECT user_id,sso_id,sso_code,create_time,update_time,login_ip,state FROM ms_user_sso WHERE user_id = ‘1’;
刪除數(shù)據(jù)
DELETE FROM ms_user_sso WHERE user_id = ‘2’ ;
不帶where條件,就是刪除全部數(shù)據(jù)。原則上不允許該操作,優(yōu)化篇會(huì)詳解。TRUNCATE TABLE也是清空表數(shù)據(jù),但是占用的資源相對(duì)較少。
2、數(shù)據(jù)安全 不可逆加密
這類加密算法,多用來(lái)做數(shù)據(jù)驗(yàn)證操作,比如常見(jiàn)的密碼驗(yàn)證。
SELECT MD5(‘cicada’)=’94454b1241ad2cfbd0c44efda1b6b6ba’ ; SELECT SHA(‘cicada’)=’a2e4fd34e1d14015fc4dedc7d’; SELECT PASSWORD(‘ile’)=’*B4FB95D86DCFC3F33ADC742CD’ ; 可逆加密
安全性要求高的系統(tǒng),需要做三級(jí)等保,對(duì)數(shù)據(jù)的安全性極高,數(shù)據(jù)在存儲(chǔ)時(shí)必須加密入庫(kù),取出時(shí)候需要解密,這些就需要可逆加密。
SELECT DECODE(ENCODE(‘123456′,’key_salt’),’key_salt’) ; SELECT AES_DECRYPT(AES_ENCRYPT(‘cicada’,’salt123′),’salt123′);
上述數(shù)據(jù)安全的管理,也可以基于應(yīng)用系統(tǒng)的服務(wù)(代碼)層進(jìn)行處理,相對(duì)專業(yè)的流程是從數(shù)據(jù)生成源頭處理,規(guī)避數(shù)據(jù)傳遞過(guò)程泄露,造成不必要的風(fēng)險(xiǎn)。
在系統(tǒng)設(shè)計(jì)中,對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)應(yīng)考慮哪些設(shè)計(jì)原則?
數(shù)據(jù)庫(kù)是整個(gè)軟件應(yīng)用的根基,是軟件設(shè)計(jì)的起點(diǎn),它起著決定性的質(zhì)變作用,因此我們必須對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)高度重視起來(lái),培養(yǎng)設(shè)計(jì)良好數(shù)據(jù)庫(kù)的習(xí)慣,是一個(gè)優(yōu)秀的軟件設(shè)計(jì)師所必須具備的基本素質(zhì)條件!
那么我們要做到什么程度才是對(duì)的呢?下面就說(shuō)說(shuō)數(shù)據(jù)庫(kù)設(shè)計(jì)的原則:
1、數(shù)據(jù)庫(kù)設(shè)計(jì)最起碼要占用整個(gè)項(xiàng)目開(kāi)發(fā)的40%以上的時(shí)間
數(shù)據(jù)庫(kù)是需求的直觀反應(yīng)和表現(xiàn),因此設(shè)計(jì)時(shí)必須要切實(shí)符合用戶的需求,要多次與用戶溝通交流來(lái)細(xì)化需求,將需求中的要求和每一次的變化都要一一體現(xiàn)在數(shù)據(jù)庫(kù)的設(shè)計(jì)當(dāng)中。如果需求不明確,就要分析不確定的因素,設(shè)計(jì)表時(shí)就要事先預(yù)留出可變通的字段,正所謂“有備無(wú)患”。
2、數(shù)據(jù)庫(kù)設(shè)計(jì)不僅僅停留于頁(yè)面demo的表面
頁(yè)面內(nèi)容所需要的字段,在數(shù)據(jù)庫(kù)設(shè)計(jì)中只是一部分,還有系統(tǒng)運(yùn)轉(zhuǎn)、模塊交互、中轉(zhuǎn)數(shù)據(jù)、表之間的聯(lián)系等等所需要的字段,因此數(shù)據(jù)庫(kù)設(shè)計(jì)絕對(duì)不是簡(jiǎn)單的基本數(shù)據(jù)存儲(chǔ),還有邏輯數(shù)據(jù)存儲(chǔ)。
3、數(shù)據(jù)庫(kù)設(shè)計(jì)完成后,項(xiàng)目80%的設(shè)計(jì)開(kāi)發(fā)在你腦海中就已經(jīng)完成了
每個(gè)字段的設(shè)計(jì)都是有他必要的意義的,你在設(shè)計(jì)每一個(gè)字段的同時(shí),就應(yīng)該已經(jīng)想清楚程序中如何去運(yùn)用這些字段,多張表的聯(lián)系在程序中是如何體現(xiàn)的。換句話說(shuō),你完成數(shù)據(jù)庫(kù)設(shè)計(jì)后,程序中所有的實(shí)現(xiàn)思路和實(shí)現(xiàn)方式在你的腦海中就已經(jīng)考慮過(guò)了。如果達(dá)不到這種程度,那當(dāng)進(jìn)入編碼階段后,才發(fā)現(xiàn)要運(yùn)用的技術(shù)或?qū)崿F(xiàn)的方式數(shù)據(jù)庫(kù)無(wú)法支持,這時(shí)再改動(dòng)數(shù)據(jù)庫(kù)就會(huì)很麻煩,會(huì)造成一系列不可預(yù)測(cè)的問(wèn)題。
4、數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)就要考慮到效率和優(yōu)化問(wèn)題
一開(kāi)始就要分析哪些表會(huì)存儲(chǔ)較多的數(shù)據(jù)量,對(duì)于數(shù)據(jù)量較大的表的設(shè)計(jì)往往是粗粒度的,也會(huì)冗余一些必要的字段,已達(dá)到盡量用最少的表、最弱的表關(guān)系去存儲(chǔ)海量的數(shù)據(jù)。并且在設(shè)計(jì)表時(shí),一般都會(huì)對(duì)主鍵建立聚集索引,含有大數(shù)據(jù)量的表更是要建立索引以提供查詢性能。對(duì)于含有計(jì)算、數(shù)據(jù)交互、統(tǒng)計(jì)這類需求時(shí),還要考慮是否有必要采用存儲(chǔ)過(guò)程。
5、添加必要的(冗余)字段
像“創(chuàng)建時(shí)間”、“修改時(shí)間”、“備注”、“操作用戶IP”和一些用于其他需求(如統(tǒng)計(jì))的字段等,在每張表中必須都要有,不是說(shuō)只有系統(tǒng)中用到的數(shù)據(jù)才會(huì)存到數(shù)據(jù)庫(kù)中,一些冗余字段是為了便于日后維護(hù)、分析、拓展而添加的,這點(diǎn)是非常重要的,比如黑客攻擊,篡改了數(shù)據(jù),我們便就可以根據(jù)修改時(shí)間和操作用戶IP來(lái)查找定位。
6、設(shè)計(jì)合理的表關(guān)聯(lián)
若多張表之間的關(guān)系復(fù)雜,建議采用第三張映射表來(lái)關(guān)聯(lián)維護(hù)兩張表之間的關(guān)系,以降低表之間的直接耦合度。若多張表涉及到大數(shù)據(jù)量的問(wèn)題,表結(jié)構(gòu)盡量簡(jiǎn)單,關(guān)聯(lián)也要盡可能避免。
7、設(shè)計(jì)表時(shí)不加主外鍵等約束性關(guān)聯(lián),系統(tǒng)編碼階段完成后再添加約束性關(guān)聯(lián)
這樣做的目的是有利于團(tuán)隊(duì)并行開(kāi)發(fā),減少編碼時(shí)所遇到的問(wèn)題,表之間的關(guān)系靠程序來(lái)控制。編碼完成后再加關(guān)聯(lián)并進(jìn)行測(cè)試。不過(guò)也有一些公司的做法是干脆就不加表關(guān)聯(lián)。
8、選擇合適的主鍵生成策略
秒殺模塊數(shù)據(jù)庫(kù)設(shè)計(jì)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于秒殺模塊數(shù)據(jù)庫(kù)設(shè)計(jì),如何設(shè)計(jì)秒殺模塊的數(shù)據(jù)庫(kù)?,數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì),常見(jiàn)的數(shù)據(jù)庫(kù)管理系統(tǒng),在系統(tǒng)設(shè)計(jì)中,對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)應(yīng)考慮哪些設(shè)計(jì)原則?的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章標(biāo)題:如何設(shè)計(jì)秒殺模塊的數(shù)據(jù)庫(kù)?(秒殺模塊數(shù)據(jù)庫(kù)設(shè)計(jì))
新聞來(lái)源:http://m.5511xx.com/article/dhhhepg.html


咨詢
建站咨詢
