自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

除了 MySQL 數(shù)據(jù)庫,你還要了解的一些數(shù)據(jù)庫

數(shù)據(jù)庫
數(shù)據(jù)庫的選型,在我架構(gòu)過程中也是重中之重。什么場景適合合適什么數(shù)據(jù)庫,每種數(shù)據(jù)庫的特點(diǎn)是什么,在架構(gòu)中起到什么樣的作用,承擔(dān)的重點(diǎn)業(yè)務(wù)是什么?

 [[424016]]

數(shù)據(jù)庫是我們?cè)陧?xiàng)目開發(fā)過程中必不可少的一項(xiàng)服務(wù)。 相信技術(shù)大大也都接觸過各種類型的數(shù)據(jù)庫,例如Oracle、MySQL、MongoDB、Redis等大眾熟知的數(shù)據(jù)庫。

數(shù)據(jù)庫的選型,在我架構(gòu)過程中也是重中之重。什么場景適合合適什么數(shù)據(jù)庫,每種數(shù)據(jù)庫的特點(diǎn)是什么,在架構(gòu)中起到什么樣的作用,承擔(dān)的重點(diǎn)業(yè)務(wù)是什么?

我們?cè)?nbsp;DB-ENGINES (https://db-engines.com/en/ranking)看到,參與排名的數(shù)據(jù)庫就多達(dá)354種。如下圖,這里2021年7月的一個(gè)數(shù)據(jù)庫排名供參考。

所以,本篇文章主要是科普一些常用的或者熱門的數(shù)據(jù)庫供大家了解,在以后選用數(shù)據(jù)庫的時(shí)候也可以多方面考慮,選用適合的業(yè)務(wù)場景的數(shù)據(jù)庫。

人的精力有限,我們不需要清楚每一種數(shù)據(jù)庫里的細(xì)節(jié),但是我們可以根據(jù)我們業(yè)務(wù)的使用場景,選擇合適范圍的數(shù)據(jù)庫,再針對(duì)性的進(jìn)行分析和選擇。

數(shù)據(jù)庫按類型可分為以下幾類:

  • 關(guān)系型數(shù)據(jù)庫

  • 文檔型數(shù)據(jù)庫

  • Key-Value數(shù)據(jù)庫

  • 圖數(shù)據(jù)庫

  • 時(shí)序數(shù)據(jù)庫

  • 檢索型數(shù)據(jù)庫

  • 列存儲(chǔ)數(shù)據(jù)庫

根據(jù)類型,我們簡單的介紹一下我們經(jīng)常使用、關(guān)注或者常見的數(shù)據(jù)庫。

關(guān)系型數(shù)據(jù)庫

關(guān)系型數(shù)據(jù)庫模型是將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)以行和列的形式進(jìn)行存儲(chǔ),類似于Excel表格的數(shù)據(jù)形式。在關(guān)系型數(shù)據(jù)中,對(duì)數(shù)據(jù)的操作幾乎都是建立在一個(gè)或多個(gè)關(guān)系表的基礎(chǔ)上進(jìn)行的。通過表的關(guān)系來實(shí)現(xiàn)數(shù)據(jù)庫的管理。典型的數(shù)據(jù)庫有 Oracle 、 MySQL 等。Oracle、MySQL都是當(dāng)下最流行的關(guān)系型數(shù)據(jù),從上面排名可以看出,兩都常年居于排行榜Top 2。

Oracle 是甲骨文公司的一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它在數(shù)據(jù)庫領(lǐng)域一直處于領(lǐng)先地位的產(chǎn)品,是一種高效率、可靠性好、高吞吐量的數(shù)據(jù)庫解決方案。Oracle的高性能、高可能、可靠性是毋庸置疑的,早些年時(shí),世界500強(qiáng)幾乎都選用的Oracle,當(dāng)然,Oracle是收費(fèi)的軟件。

MySQL 是開放的源碼軟件,相比Oracle,它可以大大降低成本。MySQL 原開發(fā)者為瑞典的MySQL AB公司,在2008年被 Sun Microsystems收購,并于2009年被甲骨文公司收購,成為Oracle旗下產(chǎn)品。目前MySQL有收費(fèi)的企業(yè)版和免費(fèi)的社區(qū)版。對(duì)于一般的個(gè)人用戶或者中小型企業(yè)來說,MySQL提供的功能已經(jīng)綽綽有余。當(dāng)年,LAMP(LNMP)架構(gòu)風(fēng)靡互聯(lián)網(wǎng),MySQL在其中扮演了重要角色。

除此之外,PostgreSQL、OceanDB、TiDB、SQL Server、SQLite等屬于關(guān)系型數(shù)據(jù)庫。 PostgreSQL 是以加州大學(xué)伯克利分校計(jì)算機(jī)開發(fā)的Postgres 為基礎(chǔ)的對(duì)象關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在靈活的BSD許可證下發(fā)行,任何人都可以以任何目的免費(fèi)使用、修改和分發(fā)PostgreSQL。

OceanDB 是阿里巴巴和螞蟻金服100%自主研發(fā)的金融級(jí)分布式關(guān)系數(shù)據(jù)庫,在普通硬件上實(shí)現(xiàn)金融級(jí)高可用。

TiDB 是PingCAP公司自主設(shè)計(jì)、研發(fā)的開源分布式關(guān)系型數(shù)據(jù)庫,是一款同時(shí)支持在線事務(wù)處理與在線分析處理的融合型分布式數(shù)據(jù)庫產(chǎn)品。適合高可用、強(qiáng)一致性要求較高、數(shù)據(jù)規(guī)模大等應(yīng)用場景。

MicroSoftSQLServer 相信大家都不陌生,是由微軟公司推出的關(guān)系數(shù)據(jù)庫解決方案。它的幾個(gè)初始版本適用于中小企業(yè)的數(shù)據(jù)管理,近年來應(yīng)用范圍有所擴(kuò)展,已經(jīng)觸及到大型、跨國企業(yè)的數(shù)據(jù)管理。

SQLite 是遵守ACID的關(guān)系數(shù)據(jù)庫管理系統(tǒng),但不同的是,它不是一個(gè)客戶端/服務(wù)器結(jié)構(gòu)的數(shù)據(jù)庫,而是被集成在了用戶程序中。

關(guān)系型數(shù)據(jù)庫經(jīng)過幾十年的發(fā)展后已經(jīng)非常成熟,強(qiáng)大的SQL功能和ACID的屬性使得關(guān)系數(shù)據(jù)庫廣泛應(yīng)用于各行各業(yè)的系統(tǒng)中,但這并不意味著關(guān)系型數(shù)據(jù)庫就是完美無缺的,例如:

  • 關(guān)系數(shù)據(jù)庫是行存儲(chǔ),無法存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)

  • 關(guān)系數(shù)據(jù)庫的schema是強(qiáng)約束,擴(kuò)展不方便

  • 在大數(shù)據(jù)場景下I/O較高

  • 全文檢索功能弱

因此,針對(duì)關(guān)系型數(shù)據(jù)庫的弱點(diǎn),也就誕生了不同的NoSQL解決方案,NoSQL 可以作為SQL的一個(gè)有力的輔助方案,NoSQL != Not SQL,而是Not Only SQL。

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

文檔型數(shù)據(jù)庫主要解決關(guān)系數(shù)據(jù)庫強(qiáng)schema約束的問題,其最大特點(diǎn)就是no-schema,可以存儲(chǔ)或讀取任意的數(shù)據(jù)。大部分文檔型數(shù)據(jù)庫存儲(chǔ)的數(shù)據(jù)格式是JSON或者BSON,其主要優(yōu)勢在于:

  • 新增字段簡單,無須像SQL一樣先執(zhí)行DDL語句修改表結(jié)構(gòu)。

  • 歷史數(shù)據(jù)兼容性強(qiáng),即使沒有新增字段,也不會(huì)導(dǎo)致出錯(cuò),在代碼層面做好兼容性即可。

  • 可以存儲(chǔ)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),相對(duì)SQL更簡便。

當(dāng)然,文檔型數(shù)據(jù)庫的優(yōu)勢也是有代價(jià)的,最主要的就是不支持事務(wù),在某些強(qiáng)事務(wù)性的應(yīng)用場景就不適用了。另外一個(gè)缺點(diǎn)就是無法使用join操作。因此需要在程序?qū)用鎭韺?shí)現(xiàn)相應(yīng)的業(yè)務(wù)。以MongoDB為代表。

文檔型數(shù)據(jù)庫以MongoDB、CouchDB為代表。 MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由 C++ 語言編寫,旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案,是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。2015 年 12 月,在發(fā)布的 3.2 版本中,在 MongoDB 的聚合框架(Aggregation)中增加了一個(gè)不起眼的操作符: $lookup,同時(shí)也開啟了支持關(guān)系數(shù)據(jù)庫的核心功能:關(guān)聯(lián)。2018年6月,MongoDB推出ACID事務(wù)支持,成為第一個(gè)支持強(qiáng)事務(wù)的NoSQL數(shù)據(jù)庫。

key-value型數(shù)據(jù)庫

提到K-V存儲(chǔ)型數(shù)據(jù)庫,大家第一時(shí)間想到的NoSQL可能就要數(shù)Redis或Memcache了。它主要解決了關(guān)系數(shù)據(jù)庫無法存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的問題,具有極高的讀寫并發(fā)能力。K-V數(shù)據(jù)庫并不支持完整的ACID事務(wù)。在高訪問量的系統(tǒng)中,我們一般首選會(huì)用到redis或者M(jìn)emcache來做數(shù)據(jù)緩存,緩解數(shù)據(jù)庫的壓力,提升網(wǎng)站或應(yīng)用的響應(yīng)速度。

以Redis為例,Redis是K-V型數(shù)據(jù)庫的典型代表,Redis的Value是具體的數(shù)據(jù)結(jié)構(gòu),我們常用的有五種,包括字符串、散列、列表、集合、有序集合,隨著Redis的不斷更新,數(shù)據(jù)結(jié)構(gòu)也增加了HyperLogLog、位圖、流、地理坐標(biāo)等豐富的數(shù)據(jù)結(jié)構(gòu),每種數(shù)據(jù)結(jié)構(gòu)都適用于解決一些特殊場景的問題。比如熱點(diǎn)數(shù)據(jù)緩存、計(jì)數(shù)器、排行榜、隊(duì)列、分布式緩存等。不同于Memcache,Redis也支持持久化,支持RDB模式、AOF模式以及RDB-AOF混合模式(從4.0開始支持)。

這里再介紹一下另一個(gè)KV型數(shù)據(jù)庫——Etcd。etcd是一種開源的分布式統(tǒng)一鍵值存儲(chǔ),用于分布式系統(tǒng)或計(jì)算機(jī)集群的共享配置、服務(wù)發(fā)現(xiàn)和調(diào)度協(xié)調(diào)。有助力于促進(jìn)更加安全的自動(dòng)更新,協(xié)調(diào)向主機(jī)調(diào)度工作,并幫助設(shè)置容器的覆蓋網(wǎng)絡(luò)。

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

圖數(shù)據(jù)庫(英語:graph database,GDB[1])是一個(gè)使用圖結(jié)構(gòu)進(jìn)行語義查詢的數(shù)據(jù)庫,它使用節(jié)點(diǎn)、邊和屬性來表示和存儲(chǔ)數(shù)據(jù)。該系統(tǒng)的關(guān)鍵概念是圖,它直接將存儲(chǔ)中的數(shù)據(jù)項(xiàng),與數(shù)據(jù)節(jié)點(diǎn)和節(jié)點(diǎn)間表示關(guān)系的邊的集合相關(guān)聯(lián)。這些關(guān)系允許直接將存儲(chǔ)區(qū)中的數(shù)據(jù)鏈接在一起,并且在許多情況下,可以通過一個(gè)操作進(jìn)行檢索。圖數(shù)據(jù)庫將數(shù)據(jù)之間的關(guān)系作為優(yōu)先級(jí)。查詢圖數(shù)據(jù)庫中的關(guān)系很快,因?yàn)樗鼈冇谰么鎯?chǔ)在數(shù)據(jù)庫本身中??梢允褂脠D數(shù)據(jù)庫直觀地顯示關(guān)系,使其對(duì)于高度互連的數(shù)據(jù)非常有用?!菊跃S基百科】

隨著社交、電商、金融、物聯(lián)網(wǎng)的快速發(fā)展,圖數(shù)據(jù)庫的應(yīng)用也越來越廣泛,例如金融行業(yè)風(fēng)控、反欺詐應(yīng)用,社交場景的關(guān)系圖譜,電商領(lǐng)域的商品推薦實(shí)現(xiàn)精準(zhǔn)營銷等。

Neo4j是由Java實(shí)現(xiàn)的開源圖數(shù)據(jù)庫,支持ACID、集群、備份和故障轉(zhuǎn)移??梢允褂闷鋬?nèi)置的REST WEB API接口從大多數(shù)編程語言訪問,以及使用官方程序的專有Bolt協(xié)議。

從圖數(shù)據(jù)庫的排名上也能看出,Neo4j是目前市場上最受歡迎的圖數(shù)據(jù)庫之一。

時(shí)序數(shù)據(jù)庫

時(shí)序數(shù)據(jù)庫全稱為時(shí)間序列數(shù)據(jù)庫。時(shí)間序列數(shù)據(jù)庫主要用于指處理帶時(shí)間標(biāo)簽(按照時(shí)間的順序變化,即時(shí)間序列化)的數(shù)據(jù),帶時(shí)間標(biāo)簽的數(shù)據(jù)也稱為時(shí)間序列數(shù)據(jù)。

時(shí)間序列數(shù)據(jù)主要由電力行業(yè)、化工行業(yè)等各類型實(shí)時(shí)監(jiān)測、檢查與分析設(shè)備所采集、產(chǎn)生的數(shù)據(jù),這些工業(yè)數(shù)據(jù)的典型特點(diǎn)是:產(chǎn)生頻率快(每一個(gè)監(jiān)測點(diǎn)一秒鐘內(nèi)可產(chǎn)生多條數(shù)據(jù))、嚴(yán)重依賴于采集時(shí)間(每一條數(shù)據(jù)均要求對(duì)應(yīng)唯一的時(shí)間)、測點(diǎn)多信息量大(常規(guī)的實(shí)時(shí)監(jiān)測系統(tǒng)均有成千上萬的監(jiān)測點(diǎn),監(jiān)測點(diǎn)每秒鐘都產(chǎn)生數(shù)據(jù),每天產(chǎn)生幾十GB的數(shù)據(jù)量)?!菊园俣劝倏啤?/p>

目前從 DB-ENGINES 能看出來,InfluxDB比較火爆。

InfluxDB是一個(gè)由InfluxData開發(fā)的開源時(shí)序型數(shù)據(jù)庫,它是由Go編寫,著力于高性能地查詢和存儲(chǔ)時(shí)序型數(shù)據(jù)。InfluxDB被廣泛應(yīng)用于存儲(chǔ)系統(tǒng)的監(jiān)控?cái)?shù)據(jù),IoT行業(yè)的實(shí)時(shí)數(shù)據(jù)等場景。

檢索型數(shù)據(jù)庫

搜索是我們項(xiàng)目中必不可少的功能之一。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫通過索引來達(dá)到快速查詢的目的,但是在全文搜索的業(yè)務(wù)場景下,索引也是無效的。比如用like查詢是整表掃描,效率很低。而我們經(jīng)常會(huì)用到的搜索引擎有Sphinx、Solr、Elasticsearch等。他們支持復(fù)雜的搜索表達(dá)式、全文搜索、詞干分析、搜索結(jié)果的排序與分組等,并且相對(duì)關(guān)系型數(shù)據(jù)庫來說有很大的性能優(yōu)勢。

列存儲(chǔ)數(shù)據(jù)庫

列式數(shù)據(jù)庫就是按照列來存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫,而我們經(jīng)常用到的關(guān)系型數(shù)據(jù)庫則被稱為“行式數(shù)據(jù)庫”。寬列存儲(chǔ),也稱為可擴(kuò)展記錄存儲(chǔ),將數(shù)據(jù)存儲(chǔ)在記錄中,能夠保存大量動(dòng)態(tài)列。由于列名和記錄鍵不是固定的,而且記錄可以有數(shù)十億列,因此寬列存儲(chǔ)可以看作是二維鍵值存儲(chǔ)。

列式數(shù)據(jù)庫主要解決關(guān)系數(shù)據(jù)庫大數(shù)據(jù)場景下的I/O問題,以HBase、Cassandra為代表。

寫在最后

沒有最好的數(shù)據(jù)庫,只有最合適的數(shù)據(jù)庫。項(xiàng)目在選用數(shù)據(jù)庫時(shí),肯定是結(jié)合自己的業(yè)務(wù)特點(diǎn),架構(gòu)選擇、成本等多方面因素綜合考慮的。同時(shí)也不要局限在自己熟悉的數(shù)據(jù)庫,不能因?yàn)槭煜ySQL,不管實(shí)際業(yè)務(wù)場景和特點(diǎn),全部使用MySQL。

 

責(zé)任編輯:張燕妮 來源: 西梧Runtime
相關(guān)推薦

2020-08-07 08:04:03

數(shù)據(jù)庫MySQL技術(shù)

2011-07-29 15:58:53

SGAOracle

2011-03-10 13:19:47

Oracle數(shù)據(jù)庫

2018-06-21 14:50:00

2010-05-21 13:34:53

MySQL數(shù)據(jù)庫

2010-05-12 15:41:21

MySQL數(shù)據(jù)庫

2011-08-01 13:59:22

Oracle數(shù)據(jù)庫命名空間

2010-05-18 10:47:52

2021-03-11 10:49:27

數(shù)據(jù)管理

2011-08-15 14:52:07

數(shù)據(jù)庫登錄名數(shù)據(jù)庫用戶名

2020-07-10 06:11:19

數(shù)據(jù)庫擴(kuò)展負(fù)載

2018-10-16 16:00:39

數(shù)據(jù)庫鎖舞MySQL

2018-07-27 18:20:31

數(shù)據(jù)庫MySQL 數(shù)據(jù)庫建表

2011-08-03 17:43:53

MySQL數(shù)據(jù)庫外鍵約束

2011-08-25 14:50:42

SQL Server數(shù)常用操作

2021-09-07 10:12:25

分布式數(shù)據(jù)庫集群

2011-09-01 15:39:43

QT數(shù)據(jù)庫

2010-08-25 14:32:49

DB2數(shù)據(jù)庫遷移

2024-06-14 07:59:00

2011-03-21 13:41:20

數(shù)據(jù)庫開發(fā)規(guī)范
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)