欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:一個項目,用十款數(shù)據(jù)庫?

柚子快報邀請碼778899分享:一個項目,用十款數(shù)據(jù)庫?

http://yzkb.51969.com/

大家好,我是豆小匠。

關于數(shù)據(jù)庫,大學的時候只知道MySQL,學習深入點也就是用到了Redis、MongoDB等非關系型數(shù)據(jù)庫。

然而,工作中用到的數(shù)據(jù)庫實在太多,每種數(shù)據(jù)庫都有自身的優(yōu)勢和局限性。所以在這里梳理下日常常用數(shù)據(jù)庫和適用場景,走起!

1. 常用數(shù)據(jù)庫

1.1. 關系型數(shù)據(jù)庫

關系型數(shù)據(jù)庫通常是業(yè)務型項目的主力數(shù)據(jù)庫,原因以下:

方便業(yè)務建模,表的關系和業(yè)務之間的關聯(lián)是類似的。數(shù)據(jù)一致性,關系型數(shù)據(jù)庫一般支持ACID特性,可用于核心業(yè)務場景的數(shù)據(jù)持久化。

關系型數(shù)據(jù)庫的基本單位是表,表與表之間通過鍵關聯(lián),比如學生表和班級表,可以通過班級ID,把學生和班級關聯(lián)起來。

關系型數(shù)據(jù)庫的經(jīng)典代表:MySQL、Orcle、PostgreSQL、SQLite等。

1.2. 非關系型數(shù)據(jù)庫

非關系型數(shù)據(jù)庫其實只是一個比較籠統(tǒng)的叫法,實際分類下有非常多,這里只介紹鍵值對、文檔、列式存儲、圖形結(jié)構(gòu)等幾種。

1.2.1. KV數(shù)據(jù)庫

KV數(shù)據(jù)庫以鍵值對的形式存儲數(shù)據(jù),常見底層數(shù)據(jù)結(jié)構(gòu)實現(xiàn)是哈希表,讀數(shù)據(jù)復雜度是O(1)。

keyvaluebeangoodmilkbad

key-value存儲的數(shù)據(jù)通常單個key-value就是一個條獨立的數(shù)據(jù),很方便水平擴展,可以根據(jù)key散列到不同的分片,且讀的性能極好,因此常用于做緩存。

經(jīng)典的代表有Redis、Memcached和LevelDB等。

1.2.2. 文檔型數(shù)據(jù)庫

文檔型數(shù)據(jù)庫的數(shù)據(jù)以文檔的形式存儲數(shù)據(jù),每個文檔類似一個JSON對象。

相比于KV存儲,文檔型數(shù)據(jù)庫同樣對水平擴展友好,且具有更好的查詢性能,支持復雜查詢,而KV存儲幾乎只通過key來讀取數(shù)據(jù)。

經(jīng)典的文檔型數(shù)據(jù)庫有MongoDB,CouchDB和Elasticsearch等。

1.2.3. 列式存儲數(shù)據(jù)庫

經(jīng)典的列式存儲數(shù)據(jù)庫有HBase、Druid、ClickHouse等,不同列式數(shù)據(jù)庫的底層實現(xiàn)差別挺大的,它們的共同點是按列存儲。

比如說MySQL存一個學生信息,有學號和姓名等,這兩個字段在同一行,存放也是在一起的;但是列式數(shù)據(jù)庫會按列劃分存儲,把學號和姓名分開存儲,相同的數(shù)據(jù)類型有利于進行數(shù)據(jù)壓縮、聚合操作等。

下面是HBase的一條數(shù)據(jù)組成解析,一個Row Key(行鍵)下有多個Column Family(列族),列族下面有Column Qualifier(列限定符),最后會根據(jù)設置保存若干個版本,形成Timestamp/version: Cell Value的鍵值對。這里我們只需要知道不同的列族是分開存儲的就行了。

1.2.4. 圖數(shù)據(jù)庫

圖數(shù)據(jù)庫的基本單元是點和邊,經(jīng)典的圖數(shù)據(jù)庫包括Neo4j、OrientDB、TigerGraph等。

簡單來說點表示實體,而邊則表示實體間的關系,組成一個整體后,可以形成知識圖譜、社交網(wǎng)絡、金融風控網(wǎng)絡等。

比如存儲了上圖關系,可以直接查詢關注了豆小匠Coding的用戶:

MATCH (user:User {name: '豆小匠Coding'})<-[:FOLLOWS]-(follower:User)

RETURN follower.name

上述查詢使用了 Neo4j 的圖查詢語言 Cypher。它首先通過 MATCH 子句找到名為豆小匠的用戶節(jié)點 user,然后通過 -[:FOLLOWS]-> 關系查找所有關注了該用戶的節(jié)點 follower。最后,通過 RETURN 子句返回關注者的姓名。

2. 場景下的數(shù)據(jù)庫

2.1. Demo項目

SQLite,一個輕量級的數(shù)據(jù)庫,不需要獨立服務器或者系統(tǒng)級別的配置,只需要一個文件,就可以存儲數(shù)據(jù)庫所有數(shù)據(jù),適用于小型設備或者嵌入式系統(tǒng)等。

如果你只是做一個demo級別的項目,也可以使用SQLite,然后使用ORM框架來操作數(shù)據(jù),后面切換MySQL也只需要修改數(shù)據(jù)庫連接邏輯。

2.2. MySQL遇到瓶頸

如果是單機MySQL遭遇性能瓶頸,可以通過主從架構(gòu)讀寫分離,堆機器的方式解決,另一個方向是增加緩存,如Redis等,減少打到物理存儲的請求量。

如果是數(shù)據(jù)量太大,單表查詢性能下降,可以考慮分庫分表,但是分庫分表在開發(fā)時需要考慮更多分布式事務、水平擴展等因素,對研發(fā)效率有影響。因此,這個時候可以考慮使用分布式數(shù)據(jù)庫,如TiDB等。

2.3. 場景專用數(shù)據(jù)庫

隨著業(yè)務的復雜,我們會發(fā)現(xiàn)不同場景下對數(shù)據(jù)庫的要求差異會很大:

一致性優(yōu)先,選用關系型數(shù)據(jù)庫。高性能全文搜索,使用Elasticsearch。非關鍵數(shù)據(jù),讀多寫少,量大,選用列式存儲。離線數(shù)據(jù)分析,Hive。

這期就喵到這!能讀到這里的朋友,點個贊唄!

柚子快報邀請碼778899分享:一個項目,用十款數(shù)據(jù)庫?

http://yzkb.51969.com/

文章鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/17818717.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄