首頁 常見問題 如何認識分散式資料庫有哪些

如何認識分散式資料庫有哪些

Oct 30, 2020 pm 02:24 PM
分散式資料庫

分散式資料庫有:1、Elasticsearch資料庫,可以存在單一節點或多個節點;2、Redis資料庫,支援豐富資料類型;3、Mongodb資料庫,能夠更方便的取得資料;4、Mysql分散式集群,高可用性。

如何認識分散式資料庫有哪些

分散式資料庫有:

一、Elasticsearch資料庫

課程推薦→:《elasticsearch全文搜尋實戰》(實戰影片)

來自課程《千萬資料並發解決方案(理論實戰)》

1.Elasticsearch簡介

 分佈式的實時文件存儲,每個字段都被索引並可被搜索,分佈式的實時分析搜索引擎

 可以擴展到上百台伺服器,處理PB級結構化或非結構化資料

2.Elasticsearch應用程式場景

 分散式的搜尋引擎和資料分析引擎,全文檢索,結構化檢索,資料分析

 對大量資料進行近實時的處理,站內搜尋(電商,招聘,門戶,等等),IT系統搜尋(OA,CRM,ERP,等等),資料分析

3.Elasticsearch的優缺點

 缺點:沒有使用者驗證和權限控制,沒有事務的概念,不支援回滾,誤刪不能恢復,需要java環境.

 優點:將你的文件分割到不同容器或分片中,可以存在單一節點或多個節點

       複製每個分片提供資料備份,防止硬體問題導致資料遺失。

       對叢集中任意節點的相互請求進行路由,確保獲取的資料是你需要的,叢集增加或重新分配分片時,不停機讓新節點恢復遺失的節點分片資料

4.Elasticsearch的持久化方案

gateway 代表elasticsearch 索引的持久化儲存方式,elasticsearch 預設是先把索引存放到記憶體中去,當記憶體滿了的時候再持久化到硬碟裡。當這個 elasticsearch 叢集關閉或再次重新啟動時就會從 gateway 中讀取索引資料。 elasticsearch 支援多種類型的 gateway,有本機檔案系統(預設),分散式檔案系統,Hadoop 的 HDFS 和 amazon 的 s3 雲端儲存服務。

ElasticSearch是先把索引的內容保存到記憶體之中,當記憶體不夠時再把索引持久化到硬碟中,同時它還有一個佇列,是在系統空閒時自動把索引寫到硬碟中。

二、Redis資料庫

1.Redis簡介

redis是開源BSD授權高階的key-value儲存系統(NoSQL),可以用來儲存字串,哈希結構,鍊錶,集合,因此,常用來提供資料結構服務,Redis支援資料的持久化,可以將記憶體中的資料保存在磁碟中,重啟的時候可以再次載入進行使用。支援簡單的key-value類型的數據,同時也提供list,set,zset,hash等資料結構的儲存。 Redis支援資料的備份,即master-slave模式的資料備份。

2.Redis應用程式場景

A)常規計數:粉絲數,微博數

B)用戶資訊變更

C)快取處理,作為mysql的快取

D)佇列系統,建置優先權的佇列系統,日誌收集系統

3.Redis的優缺點

    優點:

(1) 速度快,因為資料存在記憶體中,類似HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)

(2) 支援豐富資料類型,支持string,list,set,sorted set,hash

(3) 支援事務,操作都是原子性,所謂的原子性就是對資料的變更要麼全部執行,要麼全部不執行

(4) 豐富的功能:可用於緩存,訊息,按key設定過期時間,過期後將會自動刪除

缺點:

(1)Redis不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或手動切換前端的IP才能恢復

(2)主機宕機,宕機前有部分資料未能及時同步到從機,切換IP後還會引入資料不一致的問題,降低了系統的可用性

(3)redis的主從複製採用全量複製,複製過程中主機會fork出一個子進程對記憶體做一份快照,並將子進程的記憶體快照儲存為檔案傳送給從機,這個過程需要確保主機有足夠的空餘記憶體。若快照檔案較大,對叢集的服務能力會產生較大的影響,而且複製過程是在從機新加入叢集或從機和主機網路斷開重連時都會進行,也就是網路波動都會造成主機和從機間的一次全量的資料複製,這對實際的系統運作造成了不小的麻煩

(4)Redis較難支援線上擴容,在叢集容量達到上限時線上擴容會變得很複雜。為避免這個問題,維運人員在系統上線時必須確保有足夠的空間,這對資源造成了極大的浪費。

4.Redis的持久化方案

redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在記憶體中的資料庫記錄定時dump到磁碟上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日誌以追加的方式寫入檔案)。

RDB持久化是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork一個子進程,先將資料集寫入臨時文件,寫入成功後,再替換之前的文件,用二進位壓縮儲存。     

三、Mongodb資料庫

1.Mongodb簡介

  MongoDB本身是一種非關聯式資料庫。它的每一筆記錄是一個Document,每個Document都有一組鍵值對組成。 MongoDB中的Document與JSON物件相似。 Document中欄位的值可能包括其他Document,陣列等。

2.Mongodb應用場景

mongodb的主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集兩者的優勢於一身。 mongo適用於以下情境:

  a.網站資料:mongo非常適合即時的插入,更新與查詢,並具備網站即時資料儲存所需的複製及高度伸縮性。

  b.快取:由於效能很高,mongo也適合作為資訊基礎設施的快取層。在系統重新啟動之後,由mongo搭建的持久化快取可以避免下層的資料來源過載。

  c.大尺寸、低價值的資料:使用傳統的關聯式資料庫儲存一些資料時可能會比較貴,在此之前,許多程式設計師往往會選擇傳統的檔案來儲存。

  d.高擴展性的場景:mongo非常適合由數十或數百台伺服器組成的資料庫。

  e.用於物件及JSON資料的儲存:mongo的BSON資料格式非常適合文件格式化的儲存及查詢。

3.Mongodb的優缺點

  優點:

  (1) 弱一致性(最終一致),更能確保使用者的存取速度

# (2) 文件結構的儲存方式,能夠更方便的取得資料

  (3) 內建GridFS,支援大容量的儲存

  (4) 在使用場合下,千萬等級的文檔對象,近10G的數據,對有索引的ID的查詢不會比mysql慢,而對非索引字段的查詢,則是全面勝出。

缺點:

(1)不支援事物

(2)佔用空間過大,會造成磁碟浪費

(3)單機可靠性比較差

(4)大數據量持續插入,寫入效能有較大波動

4.Mongodb的持久化方案/異常處理

 當執行寫入作業時,MongoDB會建立一個journal來包含確切磁碟位置和改變的位元組。因此,如果伺服器突然崩潰,啟動時,journal會重播崩潰前並沒有刷新到磁碟上的任何寫入操作。

資料檔每隔60s刷新到磁碟上,預設情況下,因此journal只需要持有60s內的寫入資料。 journal預先分配了幾個空檔案用於此目的,位於/data/db/journal,命名為_j.0,j.1等等。

MongoDB運行很長時間情況下,在journal目錄下,你會看到類似於_j.6217,_j.6218和_j.6219檔案。這些檔案是目前的journal文件,如果MongoDB一直運行,這些數字會持續增加。當正常關閉MongoDB時,這些檔案將會被清除,因為正常關機不在需要這些日誌的。

如果伺服器崩潰或kill -9, mongodb再次啟動時,會重播journal文件,會輸出冗長難懂的檢驗行,這表示在正常的恢復。

四、Mysql分散式叢集

1.Mysql分散式叢集簡介

    MySQL叢集是一個沒有共享的(shared-nothing)、分散式節點架構的儲存方案,其目的是提供容錯性和高效能。

   資料更新使用讀取已提交隔離等級(read-committedisolation)來保證所有節點資料的一致性,使用兩階段提交機制(two-phasedcommit)保證所有節點都有相同的資料(如果任何一個寫入操作失敗,則更新失敗)。

   無共享的對等節點讓某台伺服器上的更新作業在其他伺服器上立即可見。傳播更新使用一種複雜的通訊機制,這種機制專用來提供跨網路的高吞吐量。

   透過多個MySQL伺服器分配負載,從而最大程式地達到高效能,透過在不同位置儲存資料保證高可用性和冗餘。

2.Mysql分散式叢集應用場景

 解決海量儲存問題,例如京東B2B就用的Mysql分散式叢集。

 適用數十億的PV對DB的存取。

3.Mysql分散式叢集的優缺點

優點:

a) 高可用性

b)快速的自動失效切換

c)靈活的分散式體系結構,沒有單點故障

d)高吞吐量和低延遲

e )可擴充性強,支援線上擴容

缺點:

a)有許多限制,例如:不支援外鍵

b)部署、管理、設定很複雜

c)佔用磁碟空間大,記憶體大

d)備份和還原不方便

e)重啟的時候,資料節點將資料load到記憶體需要很長時間

4.Mysql分散式叢集的持久化方案

負載平衡。

管理節點備份。

相關免費學習推薦:mysql影片教學

以上是如何認識分散式資料庫有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

分散式資料庫管理工具比較:MySQL vs. TiDB 分散式資料庫管理工具比較:MySQL vs. TiDB Jul 12, 2023 am 11:57 AM

分散式資料庫管理工具比較:MySQLvs.TiDB在當今資料數量和資料處理需求不斷增長的時代,分散式資料庫管理系統越來越被廣泛應用。 MySQL和TiDB是其中兩個備受關注的分散式資料庫管理工具。本文將對MySQL和TiDB進行全面比較,並探討它們的特點和優勢。 MySQL是一個開源的關聯式資料庫管理系統,被廣泛用於各種應用場景。它具有良好的穩定性、可靠性和成

MySql的分散式資料庫:如何使用MySQL實作分散式資料庫 MySql的分散式資料庫:如何使用MySQL實作分散式資料庫 Jun 15, 2023 pm 06:42 PM

隨著網路技術的不斷發展,資料庫的使用越來越普遍。無論是企業還是個人,都需要使用資料庫來儲存和管理資料。而對於大型企業來說,單獨使用一個資料庫已經無法滿足業務需求,這時就需要使用分散式資料庫來實現資料的分散式儲存和管理。 MySQL是目前使用最廣泛的開源資料庫之一,那麼如何使用MySQL實作分散式資料庫呢?一、什麼是分散式資料庫分散式資料庫是指將資料庫系統分散在

如何使用分散式資料庫架構建構高可用的MySQL集群 如何使用分散式資料庫架構建構高可用的MySQL集群 Aug 02, 2023 pm 04:29 PM

如何使用分散式資料庫架構建立高可用的MySQL叢集隨著互聯網的發展,對於資料庫的高可用性和擴展性的需求越來越高。分散式資料庫架構成為了解決這些需求的有效方式之一。本文將介紹如何使用分散式資料庫架構建立高可用的MySQL集群,並提供相關的程式碼範例。建構MySQL主從複製叢集MySQL主從複製是MySQL提供的基本的高可用性解決方案。透過主從複製,可以實現資料的

配置Linux系統以支援分散式資料庫開發 配置Linux系統以支援分散式資料庫開發 Jul 04, 2023 am 08:24 AM

配置Linux系統以支援分散式資料庫開發引言:隨著網際網路的快速發展,資料量急劇增加,對資料庫的效能和擴展性要求也越來越高。分散式資料庫成為了應對這項挑戰的解決方案。本文將介紹如何在Linux系統下設定分散式資料庫環境,以支援分散式資料庫開發。一、安裝Linux系統首先,我們需要安裝一個Linux作業系統。常見的Linux發行版有Ubuntu、CentOS、D

分散式資料庫系統有哪些特點 分散式資料庫系統有哪些特點 Sep 05, 2023 pm 05:09 PM

分散式資料庫系統特點有資料一致性、並發存取、分散式運算、負載平衡、可擴展性、安全性和可靠性等。詳細介紹:1、數據一致性,分散式資料庫系統透過多台伺服器儲存數據,因此數據的一致性由多台伺服器共同維護,每台伺服器都可以獨立地儲存和更新數據,但是它們必須遵守一致性約束,例如事務隔離等級、資料完整性等;2、並發訪問,分散式資料庫系統可以支援多個使用者同時對資料進行讀寫操作等等。

MySql的複製與叢集:如何實現大規模的分散式資料庫 MySql的複製與叢集:如何實現大規模的分散式資料庫 Jun 16, 2023 am 08:04 AM

隨著業務發展和資料量的逐步增加,單一資料庫已經無法完全滿足需求了,而分散式資料庫系統成為了業界重要的解決方案。而MySQL是目前最受歡迎的關聯式資料庫之一,對於使用MySQL建立分散式資料庫也有很多的解決方案。在這篇文章中,我們將深入探討MySQL的複製與叢集及如何實現大規模的分散式資料庫。一、MySQL的基礎架構MySQL的基礎架構主要由三個部分組成:客戶

分散式系統中 Golang 函數與分散式資料庫的交互 分散式系統中 Golang 函數與分散式資料庫的交互 Apr 19, 2024 pm 03:06 PM

在分散式系統中,Go函數可以與分散式資料庫互動。具體步驟如下:安裝必要依賴項。使用spanner.NewClient函數連接到資料庫。使用Query方法執行查詢,並取得迭代器。使用Do方法遍歷查詢結果並處理資料。查詢完成後,使用Close方法關閉連線。

PHP7.0中的分散式資料庫有哪些實作方式? PHP7.0中的分散式資料庫有哪些實作方式? May 26, 2023 am 09:12 AM

PHP是一種廣泛用於Web開發的腳本語言,它具有易學易用、效率高、跨平台等優點。隨著Web應用程式的複雜度不斷提高,對於資料儲存和管理也提出了更高的要求。傳統的單一關係型資料庫難以滿足這些需求,因此分散式資料庫成為了開發人員的關注點。在PHP7.0中,有多種實作分散式資料庫的方式,以下我們將逐一介紹。分錶分錶是一種常見的分散式資料庫實作方式,它將一張大表拆分