NoSql数据库:Cassandra,Mongo,Redis数据库比较
1.什么是NoSql數(shù)據(jù)庫?
NoSql(不僅是Sql)數(shù)據(jù)庫是可水平擴(kuò)展,持久存儲半結(jié)構(gòu)或非結(jié)構(gòu)化數(shù)據(jù)并具有靈活模式的非關(guān)系數(shù)據(jù)庫。 這些數(shù)據(jù)庫支持多種數(shù)據(jù)模型,例如鍵值,文檔,列族,基于圖形的,內(nèi)存中的等等,用于管理和訪問數(shù)據(jù)。 NoSql數(shù)據(jù)庫最適合用于構(gòu)建現(xiàn)代應(yīng)用程序,這些應(yīng)用程序需要大數(shù)據(jù)和大量請求,高度可擴(kuò)展,低延遲,高性能和靈活的數(shù)據(jù)模型,以提供出色的客戶體驗(yàn)。
在本文中,我們將討論NoSql數(shù)據(jù)庫,Cassandra,Mongo和Redis數(shù)據(jù)庫的介紹,以及何時(shí)使用這些NoSql數(shù)據(jù)庫以獲得更好的性能。
2. NoSql數(shù)據(jù)庫的功能
2.1多種型號支持
NoSql數(shù)據(jù)庫非常適合持久,管理和訪問半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。
2.2開源
大多數(shù)NoSql數(shù)據(jù)庫都是開源的。 大多數(shù)云提供商通過在后臺管理自動擴(kuò)展,補(bǔ)丁更新等將這些數(shù)據(jù)庫作為托管服務(wù)提供。
2.3可擴(kuò)展性
通過向群集添加更多服務(wù)器,NoSql數(shù)據(jù)庫可進(jìn)行水平擴(kuò)展,并且與可垂直擴(kuò)展的關(guān)系數(shù)據(jù)庫不同,該群集可分布在多個(gè)地理位置(區(qū)域)中。
2.4低延遲
由于數(shù)據(jù)復(fù)制到數(shù)據(jù)庫群集上的多個(gè)節(jié)點(diǎn),因此延遲很短。 延遲和一致性之間的權(quán)衡對于Web和移動軟件應(yīng)用程序很重要。 無論采用哪種復(fù)制方法,都將在一致性和延遲之間進(jìn)行權(quán)衡。
2.5靈活架構(gòu)
NoSql數(shù)據(jù)庫支持具有最終一致性的靈活數(shù)據(jù)模型,并且固有地?zé)o架構(gòu)。 這使NoSql數(shù)據(jù)庫適合于有效存儲半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。
2.6高性能,可用和容錯(cuò)
在NoSql數(shù)據(jù)庫中,數(shù)據(jù)被復(fù)制到群集中的多個(gè)節(jié)點(diǎn)以及其他區(qū)域中的群集中的節(jié)點(diǎn)。 此特性使NoSql數(shù)據(jù)庫具有高可用性和容錯(cuò)能力。 沒有Sql數(shù)據(jù)庫針對文檔,鍵值,列族,圖等數(shù)據(jù)模型及其訪問模式進(jìn)行了高度優(yōu)化,這些模型可提供更高的性能。
3.卡桑德拉
Apache Cassandra是一個(gè)開源,分布式,水平可伸縮,高度可用,容錯(cuò)和寬列NoSql數(shù)據(jù)庫。 它用Java編寫,是一個(gè)列族存儲數(shù)據(jù)庫。 Cassandra群集中的所有節(jié)點(diǎn)都是對等節(jié)點(diǎn),并且在Cassandra中沒有主從范式。 這使得cassandra高度可用,具有容錯(cuò)能力并且沒有單點(diǎn)故障。 Cassandra集群可以水平擴(kuò)展,并且可以分布到多個(gè)數(shù)據(jù)中心。
在cassandra中寫入速度非常快,因?yàn)樗粫人阉魅缓笤賹懭搿?首先將數(shù)據(jù)寫入提交日志 ,然后使用cassandra算法小心將數(shù)據(jù)反映到表中。 在cassandra中,圍繞查詢對數(shù)據(jù)模型進(jìn)行建模,即首先確定應(yīng)用程序查詢,然后對其進(jìn)行數(shù)據(jù)建模。
4. MongoDB
MongoDB是一個(gè)用C ++編寫的開源,跨平臺,面向文檔,高度可用,可擴(kuò)展且靈活的NoSql數(shù)據(jù)庫。 它適用于集合和文檔,并通過副本集提供高可用性。
MongoDB使用類似于JSON的文檔,這些文檔可以具有多種結(jié)構(gòu)。 由于架構(gòu)較少,因此在創(chuàng)建文檔之前無需創(chuàng)建文檔結(jié)構(gòu)。 MongoDB使用MongoDB QL(查詢語言)來訪問存儲在MongoDB中的數(shù)據(jù)。 MongoDB具有非常強(qiáng)大的聚合功能和表達(dá)性聚合框架。
5. Redis(遠(yuǎn)程字典服務(wù)器)
Redis是一個(gè)開源且可擴(kuò)展的數(shù)據(jù)存儲,可以用作數(shù)據(jù)庫,緩存以及消息代理。 它是用ANSI C編寫的。Redis是一種內(nèi)存中數(shù)據(jù)存儲,可以將其狀態(tài)持久保存到磁盤,即使重新啟動Redis節(jié)點(diǎn)也可以恢復(fù)其狀態(tài)。 它的內(nèi)存存儲使其超快。
6. Cassandra vs MongoDB vs Redis
- Cassandra以Column-Family結(jié)構(gòu)存儲數(shù)據(jù),而MongoDB以JSON文檔格式存儲數(shù)據(jù)。
- 在Cassandra中,不建議使用二級索引,因?yàn)樗鼈儠档托阅堋?在MongoDB中,最好使用索引,以避免搜索所有文檔以找到所需的文檔并獲得更好的性能。
- Cassandra是實(shí)現(xiàn)高寫入吞吐量的理想選擇,但是如果您的應(yīng)用程序需要很高的讀取并發(fā)性,請使用MongoDB。
- Cassandra沒有主節(jié)點(diǎn),所有節(jié)點(diǎn)都是對等節(jié)點(diǎn),而在MongoDB中,只有一個(gè)主節(jié)點(diǎn)。
- Cassandra最終將寫入的數(shù)據(jù)復(fù)制到集群中復(fù)制因子中指定的節(jié)點(diǎn)數(shù),以及不同區(qū)域中集群中的節(jié)點(diǎn)數(shù)。 MongoDB需要進(jìn)行一些設(shè)置才能進(jìn)行復(fù)制。 您可以設(shè)置輔助數(shù)據(jù)庫,如果主數(shù)據(jù)庫出現(xiàn)故障,則可以自動選擇該數(shù)據(jù)庫。 在MongoDB中,讀取首先首先提交給主副本,然后再復(fù)制到輔助副本。
- 在這些數(shù)據(jù)庫中,您可以在每條記錄上設(shè)置TTL(生存時(shí)間),因此可以在TTL到期后自動將記錄逐出。
- Redis是鍵值數(shù)據(jù)存儲,非常有效地用作緩存來提高應(yīng)用程序性能。
- 擴(kuò)展Cassandra和Mongo比Redis簡單得多。
- 在Redis中,數(shù)據(jù)存儲的大小不能超過系統(tǒng)上的總內(nèi)存空間,即RAM加交換空間。 Mongo數(shù)據(jù)庫的大小沒有內(nèi)在限制。
- 可以對Cassandra,MongoDB和Redis數(shù)據(jù)庫進(jìn)行集群,以實(shí)現(xiàn)高可用性,備份并增加數(shù)據(jù)存儲的整體大小。
- 如果您的應(yīng)用程序需要聚合,請使用MongoDB。 如果您的應(yīng)用程序需要鍵值臨時(shí)存儲,請使用Redis。 如果您的應(yīng)用程序需要輕松擴(kuò)展的高寫入吞吐量的寬列存儲,請使用Cassandra。
7.什么時(shí)候使用哪個(gè)NoSql數(shù)據(jù)庫?
以下是一些使用案例,其中不同的NoSql數(shù)據(jù)庫最適合并提供更好的性能。
選擇以下用例的Cassandra:
- 線性可擴(kuò)展,高可用性,容錯(cuò)
- 多數(shù)據(jù)中心部署
- 很高的寫入吞吐量,但讀取次數(shù)較少。
- 您想在存儲的數(shù)據(jù)之上建立一個(gè)響應(yīng)Swift的報(bào)告系統(tǒng)
- 實(shí)時(shí)數(shù)據(jù)分析
- 您的應(yīng)用程序不需要數(shù)據(jù)庫中的ACID屬性
- 您的應(yīng)用程序需要與Hadoop,HBase,Spark集成
選擇MongoDB用于以下用例:
- 即時(shí)擴(kuò)展
- 基于文檔的存儲
- 很高的讀取并發(fā)
- 緩存實(shí)時(shí)分析
- 內(nèi)容管理
- 寫入有效負(fù)載很高,即文檔大小很大(最大16MB)
- 在快速原型制作中非常有用
- 適合存儲大文本,視頻,圖像,媒體文件等。
選擇以下情況的Redis DB:
- 緩存更大的有效負(fù)載以提高應(yīng)用程序的性能
- 永久緩存到磁盤,需要在重啟后恢復(fù)
- 鍵值對存儲
- 需要非常高的性能
- 臨時(shí)數(shù)據(jù)存儲,例如用戶會話
- 可以使用其發(fā)布/訂閱模型用作消息傳遞隊(duì)列
8. Cassandra vs Mongo vs Redis DB –摘要
了解不同的NoSql數(shù)據(jù)庫對于選擇適合您的應(yīng)用程序需求的數(shù)據(jù)庫至關(guān)重要。 根據(jù)您的應(yīng)用程序使用案例選擇正確的NoSql數(shù)據(jù)庫。 如果您的數(shù)據(jù)關(guān)系太多并且需要ACID屬性,則NoSql數(shù)據(jù)庫不是一個(gè)不錯(cuò)的選擇。 為了提高應(yīng)用程序性能,請使用Redis作為緩存,因?yàn)樗哂袃?nèi)存存儲。 使用MongoDB滿足內(nèi)容管理和文檔類型的存儲需求。 將Cassandra用于高度可用的寬列存儲箱。 選擇正確的數(shù)據(jù)庫直接影響應(yīng)用程序的性能。
翻譯自: https://www.javacodegeeks.com/2019/02/nosql-databases-cassandra-vs-mongo-vs-redis-db-comparison.html
總結(jié)
以上是生活随笔為你收集整理的NoSql数据库:Cassandra,Mongo,Redis数据库比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想电脑usb驱动(联想电脑usb驱动程
- 下一篇: weblogic中数据源_如何在WebL