数据量大和高并发解决方法
數(shù)據(jù)量 >10億
1?、表設(shè)計(jì)合理(遵循三范式) ?既然說到這里,我們簡單介紹下 三范式:
?
?2、分表技術(shù)(垂直分割、水平分割)3、建立索引 4、讀寫分離 5mysql配置優(yōu)化(調(diào)整最大并發(fā)量,定時(shí)對數(shù)據(jù)碎片整理,和數(shù)據(jù)備份,這里要用到定時(shí)器進(jìn)行數(shù)據(jù)備份和碎片整理)
3、頁面靜態(tài)化
4、緩存技術(shù)(memcached)
第一范式(1NF)
(必須有主鍵,列不可分)
數(shù)據(jù)庫表中的任何字段都是單一屬性的,不可再分
?
create table aa(id int,NameAge varchar(100))?
insert aa values(1,''無限-女?'')?
沒有達(dá)到第一范式?
create table aa(id int,name varcahr(10),age char(2))?
insert aa values(1,''無限'',''女?'')?
達(dá)到第一范式
?
第二范式(2NF)
數(shù)據(jù)庫表中非關(guān)鍵字段對任一候選關(guān)鍵字段的?都?不存在部分函數(shù)依賴
(當(dāng)一個(gè)表是復(fù)合主鍵時(shí),非主鍵的字段不依賴于部分主鍵(即必須依賴于全部的主鍵字段))
?
create table sci(
?? sno int(32),cno int(32),grade int(32),credit int(32),
primary key sno,cno
)
課程(cno)1---1學(xué)分(credit)
學(xué)生(sno)n---n課程(cno)
學(xué)生+課程--->分?jǐn)?shù)(grade)
sci
sno cno grade credit
1??? 1?? 60???? 80
2??? 1??? 90???? 80
3?? 1??? 70???? 80
.?? .?? .????? .
.?? .?? .???? .
.??? .?? .???? .
如此以來,學(xué)分被大量重復(fù)存儲,數(shù)據(jù)冗余
如要某課程學(xué)分,則要大量重復(fù)操作
如要加新課程,由于sno和cno共同做為主鍵,則在加入新課程時(shí),必須有人選該課
如某學(xué)生某課程結(jié)業(yè),則該學(xué)生其它課程信息也同時(shí)被刪除了
總之
這種設(shè)計(jì)不太好吧,非關(guān)鍵字屬性credit僅函數(shù)依賴于cno,也就是credit部分依賴組合關(guān)鍵字(sno,cno)而不是完全依賴
解決
分成兩個(gè)關(guān)系模式 sc1(sno,cno,grade),c2(cno,credit)。新關(guān)系包括兩個(gè)關(guān)系模式,它們之間通過sc1中的外關(guān)鍵字cno相聯(lián)系,需要時(shí)再進(jìn)行自然聯(lián)接,恢復(fù)了原來的關(guān)系
?
第三范式(3NF)
關(guān)系模式R(U,F)中的所有非主屬性對任何候選關(guān)鍵字都不存在傳遞依賴
?
例----S1(SNO,SNAME,DNO,?? DNAME, LOCATION)
????????? 學(xué)號 姓名?? 所在系 系名稱 系地址?
關(guān)鍵字SNO決定各個(gè)屬性。由于是單個(gè)關(guān)鍵字,沒有部分依賴的問題,肯定是2NF。但這關(guān)系肯定有大量的冗余,有關(guān)學(xué)生所在的幾個(gè)屬性DNO,DNAME,LOCATION將重復(fù)存儲,插入,刪除和修改時(shí)也將產(chǎn)生類似以上例的情況。?
原因:關(guān)系中存在傳遞依賴造成的。即SNO 1->1 DNO。 而DNO 1->n SNO卻不存在,?而DNO -> LOCATION存在, 因此關(guān)鍵遼 SNO 對 LOCATION 函數(shù)決定是通過傳遞依賴 SNO -> LOCATION 實(shí)現(xiàn)的。也就是說,SNO不直接決定非主屬性LOCATION。?
解決目地:每個(gè)關(guān)系模式中不能留有傳遞依賴。?
解決方法:分為兩個(gè)關(guān)系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)?
注意:關(guān)系S中不能沒有外關(guān)鍵字DNO。否則兩個(gè)關(guān)系之間失去聯(lián)系
?
鮑依斯-科得范式(BCNF)
在3NF的基礎(chǔ)上,庫表中任何字段對任一候選關(guān)鍵字段的傳遞函數(shù)依賴都不存在
?
倉庫管理關(guān)系表為StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數(shù)量),且管理員1---1倉庫;倉庫1---n物品。這個(gè)數(shù)據(jù)庫表中存在如下決定關(guān)系:?
(倉庫ID, 存儲物品ID) →(管理員ID, 數(shù)量)
(管理員ID, 存儲物品ID) → (倉庫ID, 數(shù)量)
所以,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關(guān)鍵字,表中的唯一非關(guān)鍵字段為數(shù)量,它是符合第三范式的。但是,由于存在如下決定關(guān)系:
(倉庫ID) → (管理員ID)
(管理員ID) → (倉庫ID)
即存在關(guān)鍵字段決定關(guān)鍵字段的情況,所以其不符合BCNF范式
解決:
把倉庫管理關(guān)系表分解為二個(gè)關(guān)系表:?
倉庫管理:StorehouseManage(倉庫ID, 管理員ID)
倉庫:Storehouse(倉庫ID, 存儲物品ID, 數(shù)量)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/OnlyLoveCx/p/4904887.html
總結(jié)
以上是生活随笔為你收集整理的数据量大和高并发解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB数据库设计中6条重要的经验
- 下一篇: 192.168.101.1路由器如何改为