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

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

coldplay.xixi
coldplay.xixi原創
2020-10-30 14:24:569784瀏覽

分散式資料庫有: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