歡迎來(lái)到深圳市志博科技有限公司網站!
您當前的(de)位置:深圳APP開發 > 新聞資訊 > APP開發資訊 >
人(rén)
已閱讀

APP開發使用(yòng)的(de)數據庫Redis和(hé)MySQL的(de)區(qū)别

來(lái)源:lexintech.com       發布時(shí)間:2018-05-16
我們在進行APP開發時(shí),通(tōng)常會使用(yòng)MySQL數據庫或Redis數據庫,這(zhè)兩種數據庫有什(shén)麽區(qū)别,今天我們來(lái)跟大(dà)家聊一聊這(zhè)個(gè)問題。
 
首先,Redis和(hé)MySQL的(de)應用(yòng)場(chǎng)景是不同的(de)。通(tōng)常來(lái)說,沒有說用(yòng)Redis就不用(yòng)MySQL的(de)這(zhè)種情況。因爲Redis是一種非關系型數據庫(NoSQL),而MySQL是一種關系型數據庫。和(hé)Redis同類的(de)數據庫還(hái)有MongoDB和(hé)Memchache。Redis是一個(gè)開源的(de)使用(yòng)ANSI C語言編寫、支持網絡、可(kě)基于内存亦可(kě)持久化(huà)的(de)日志型、Key-Value數據庫,并提供多(duō)種語言的(de)API。
而關系型數據庫現在常用(yòng)的(de)一般有MySQL,SQL Server,Oracle。
 
我們先來(lái)了(le)解一下(xià)關系型數據庫和(hé)非關系型數據庫的(de)區(qū)别。
APP開發的(de)數據庫Redis和(hé)MySQL的(de)區(qū)别
1.存儲方式
關系型數據庫是表格式的(de),因此存儲在表的(de)行和(hé)列中。他(tā)們之間很容易關聯協作存儲,提取數據很方便。而Nosql數據庫則與其相反,他(tā)是大(dà)塊的(de)組合在一起。通(tōng)常存儲在數據集中,就像文檔、鍵值對(duì)或者圖結構。
 
2.存儲結構
關系型數據庫對(duì)應的(de)是結構化(huà)數據,數據表都預先定義了(le)結構(列的(de)定義),結構描述了(le)數據的(de)形式和(hé)内容。這(zhè)一點對(duì)數據建模至關重要,雖然預定義結構帶來(lái)了(le)可(kě)靠性和(hé)穩定性,但是修改這(zhè)些數據比較困難。而Nosql數據庫基于動态結構,使用(yòng)與非結構化(huà)數據。因爲Nosql數據庫是動态結構,可(kě)以很容易适應數據類型和(hé)結構的(de)變化(huà)。
 
3.存儲規範
關系型數據庫的(de)數據存儲爲了(le)更高(gāo)的(de)規範性,把數據分(fēn)割爲最小的(de)關系表以避免重複,獲得(de)精簡的(de)空間利用(yòng)。雖然管理(lǐ)起來(lái)很清晰,但是單個(gè)操作設計到多(duō)張表的(de)時(shí)候,數據管理(lǐ)就顯得(de)有點麻煩。而Nosql數據存儲在平面數據集中,數據經常可(kě)能會重複。單個(gè)數據庫很少被分(fēn)隔開,而是存儲成了(le)一個(gè)整體,這(zhè)樣整塊數據更加便于讀寫
 
4.存儲擴展
這(zhè)可(kě)能是兩者之間最大(dà)的(de)區(qū)别,關系型數據庫是縱向擴展,也(yě)就是說想要提高(gāo)處理(lǐ)能力,要使用(yòng)速度更快(kuài)的(de)計算(suàn)機。因爲數據存儲在關系表中,操作的(de)性能瓶頸可(kě)能涉及到多(duō)個(gè)表,需要通(tōng)過提升計算(suàn)機性能來(lái)克服。雖然有很大(dà)的(de)擴展空間,但是最終會達到縱向擴展的(de)上限。而Nosql數據庫是橫向擴展的(de),它的(de)存儲天然就是分(fēn)布式的(de),可(kě)以通(tōng)過給資源池添加更多(duō)的(de)普通(tōng)數據庫服務器來(lái)分(fēn)擔負載。
 
5.查詢方式
關系型數據庫通(tōng)過結構化(huà)查詢語言來(lái)操作數據庫(就是我們通(tōng)常說的(de)SQL)。SQL支持數據庫CURD操作的(de)功能非常強大(dà),是業界的(de)标準用(yòng)法。而Nosql查詢以塊爲單元操作數據,使用(yòng)的(de)是非結構化(huà)查詢語言(UnQl),它是沒有标準的(de)。關系型數據庫表中主鍵的(de)概念對(duì)應Nosql中存儲文檔的(de)ID。關系型數據庫使用(yòng)預定義優化(huà)方式(比如索引)來(lái)加快(kuài)查詢操作,而Nosql更簡單更精确的(de)數據訪問模式。
 
6.事務
關系型數據庫遵循ACID規則(原子性(Atomicity)、一緻性(Consistency)、隔離性(Isolation)、持久性(Durability)),而Nosql數據庫遵循BASE原則(基本可(kě)用(yòng)(Basically Availble)、軟/柔性事務(Soft-state )、最終一緻性(Eventual Consistency))。由于關系型數據庫的(de)數據強一緻性,所以對(duì)事務的(de)支持很好。關系型數據庫支持對(duì)事務原子性細粒度控制,并且易于回滾事務。而Nosql數據庫是在CAP(一緻性、可(kě)用(yòng)性、分(fēn)區(qū)容忍度)中任選兩項,因爲基于節點的(de)分(fēn)布式系統中,很難全部滿足,所以對(duì)事務的(de)支持不是很好,雖然也(yě)可(kě)以使用(yòng)事務,但是并不是Nosql的(de)閃光(guāng)點。
 
7.性能
關系型數據庫爲了(le)維護數據的(de)一緻性付出了(le)巨大(dà)的(de)代價,讀寫性能比較差。在面對(duì)高(gāo)并發讀寫性能非常差,面對(duì)海量數據的(de)時(shí)候效率非常低。而Nosql存儲的(de)格式都是key-value類型的(de),并且存儲在内存中,非常容易存儲,而且對(duì)于數據的(de) 一緻性是 弱要求。Nosql無需sql的(de)解析,提高(gāo)了(le)讀寫性能。
 
8.授權方式
大(dà)多(duō)數的(de)關系型數據庫都是付費的(de)并且價格昂貴,成本較大(dà)(MySQL是開源的(de),所以應用(yòng)的(de)場(chǎng)景最多(duō)),而Nosql數據庫通(tōng)常都是開源的(de)。
所以,在實際的(de)應用(yòng)環境中,我們一般會使用(yòng)MySQL存儲我們的(de)業務過程中的(de)數據,因爲這(zhè)些數據之間的(de)關系比較複雜(zá),我們常常會需要在查詢一個(gè)表的(de)數據時(shí)候,将其他(tā)關系表的(de)數據查詢出來(lái),例如,查詢某個(gè)用(yòng)戶的(de)訂單,那至少是需要用(yòng)戶表和(hé)訂單表的(de)數據。
查詢某個(gè)商品的(de)銷售數據,那可(kě)能就會需要用(yòng)戶表,訂單表,訂單明(míng)細表,商品表等等。
而在這(zhè)樣的(de)使用(yòng)場(chǎng)景中,我們使用(yòng)Redis來(lái)存儲的(de)話(huà),也(yě)就是KeyValue形式存儲的(de)話(huà),其實并不能滿足我們的(de)需要。
即使Redis的(de)讀取效率再高(gāo),我們也(yě)沒法用(yòng)。
但,對(duì)于某些沒有關聯少,且需要高(gāo)頻(pín)率讀寫,我們使用(yòng)Redis就能夠很好的(de)提高(gāo)整個(gè)體統的(de)并發能力。
例如商品的(de)庫存信息,我們雖然在MySQL中會有這(zhè)樣的(de)字段,但是我們并不想MySQL的(de)數據庫被高(gāo)頻(pín)的(de)讀寫,因爲使用(yòng)這(zhè)樣會導緻我的(de)商品表或者庫存表IO非常高(gāo),從而影(yǐng)響整個(gè)體統的(de)效率。
 
所以,對(duì)于這(zhè)樣的(de)數據,且有沒有什(shén)麽複雜(zá)邏輯關系(就隻是隸屬于SKU)的(de)數據,我們就可(kě)以放在Redis裏面,下(xià)單直接在Redis中減掉庫存,這(zhè)樣,我們的(de)訂單的(de)并發能力就能夠提高(gāo)了(le)。
 
 
APP開發 網站開發 産品設計 微信公衆号 APP開發公司 用(yòng)戶體驗 APP運營 微信小程序 産品經理(lǐ) 網站設計