數據分類及存儲特性——NoSQL數據存儲

NoSQL 數據存儲

傳統的架構方法是在服務之間共享一個數據庫,而微服務卻與之相反,每個微服務都擁有獨立、自主、專門的數據存儲。微服務數據存儲是基礎設施構建的重點,因爲它提供服務解耦、數據存儲自主性、小型化開發、測試設置等特性,有助於應用程序更快地交付或更新。選擇理想的數據存儲的第一步是確定微服務數據的性質,可以根據數據的特點將數據大致做如下劃分。

爲了優化微服務以獲得性能和數據持久性要求,一定要確認所選的數據庫爲數據類型提供了適當的存儲技術。我們可以對微服務及其各自的數據存儲進行分類,如下表所示。

下面是四類常見的 NoSQL 方案。

下面來介紹各種高性能 NoSQL 方案的典型特徵和應用場景。

K-V 存儲

K-V 存儲指按照鍵值(Key-Value)進行的數據存儲,其中 Key 是數據的標識,和關係數據庫中的主鍵含義一樣;Value 是具體的數據。

Redis 是 K-V 存儲的典型代表,它是一款開源(基於 BSD 許可)的高性能 K-V 緩存和存儲系統。Redis 的 Value 是具體的數據結構,包括 string、hash、list、set、sorted set、bitmap 和 hyperloglog,所以常被稱爲數據結構服務器。

K-V 存儲適合作爲分佈式內存緩存的解決方案。在微服務架構中,微服務共享的一些全局數據都保存在 K-V 存儲中,例如,用戶信息(如會話)、分佈式鎖、配置文件、參數、購物車等。這些信息一般都和 ID 掛鉤。通過鍵值操作就可以獲得共享的 Value,Redis 提供的主從複製模式(Replication-Sentinel 模式)和集羣模式(Redis-Cluster 模式)可以很好地提供多數據中心、多向複製等高度可用性和高度擴展性。Redis 高性能的數據存儲總結下來有下面幾個原因。

文檔數據庫

爲了解決關係數據庫 Schema 帶來的問題,文檔數據庫應運而生。MongoDB 作爲文檔數據庫的典型代表,是專爲可擴展性、高性能和高可用性設計的數據庫。它可以從單服務器部署擴展到大型、複雜的多數據中心架構。利用內存計算的優勢,MongoDB 能夠提供高性能的數據讀寫操作。MongoDB 的本地複製和自動故障轉移功能使應用程序具有企業級的可靠性和操作靈活性。

文檔數據庫最大的特點就是 No-Schema(不使用表結構)存儲和可讀取任意數據。目前絕大部分文檔數據庫存儲的數據格式是 JSON,因爲 JSON 數據是自描述的,讀取一個 JSON 中不存在的字段也不會導致 SQL 那樣的語法錯誤。文檔數據庫的 No-Schema 特性,爲業務開發帶來了幾個明顯的優勢。

列式數據庫

顧名思義,列式數據庫就是按照列來存儲數據的數據庫,與之對應的傳統關係數據庫被稱爲 “行式數據庫”,關係數據庫就是按照行來存儲數據的。

HBase 是一個開源的非關係分佈式數據庫,它參考了谷歌的 BigTable 建模,實現的編程語言爲 Java。它是 Apache 軟件基金會 Hadoop 項目的一部分,運行於 HDFS 文件系統上,爲 Hadoop 提供類似 BigTable 規模的服務。因此,它可以存儲海量稀疏的數據。HBase 基於 LSM 樹實現,它將對數據的修改增量保持在內存中,達到指定的大小後將這些修改操作批量寫入磁盤。在極端情況下,寫性能比 MySQL 高一個數量級,讀性能低一個數量級,所以列式數據庫的適用場景,以 HBase 爲例說明如下:

全文搜索引擎

傳統的關係數據庫通過索引來達到快速查詢的目的,但是在全文搜索的業務場景下,索引也無能爲力,主要體現在:全文搜索的條件可以隨意排列組合,如果通過索引來滿足,則索引的數量會非常多。

全文搜索的模糊匹配方式,索引無法滿足,只能用 like 查詢,而 like 查詢是整表掃描的,效率非常低。全文搜索引擎(又稱爲倒排索引)的基本原理是建立單詞到文檔的索引。而正排索引的基本原理是建立文檔到單詞的索引。Elasticsearch 是一個分佈式可擴展的實時搜索和分析引擎,一個建立在全文的搜索引擎。當然 Elasticsearch 並不像 Apache Lucene 那麼簡單,它不僅具有全文搜索功能,還具有下列特性和能力:

下表是一份簡易的 Elasticsearch 和關係數據庫的術語對照表。

一個 Elasticsearch 集羣可以包含多個索引(數據庫),也就是說可以包含很多類型。這些類型中包含了很多的文檔(行),然後每個文檔中又都包含了很多字段(列)。Elasticsearch 的交互可以使用 Java Native API,也可以使用 HTTP 的 Restful API。Elasticsearch 通過 Lucene 的倒排索引技術可以實現比關係數據庫更快的過濾。

Elasticsearch 可以爲任何形式的數據提供出色的搜索和分析,通過 Kibana 提供交互式控制面板。我們經常使用 Elasticsearch 來調試日誌用例。

來源:

https://www.toutiao.com/article/7097471371168662048/?log_from=3230af473fd71_1654825830746

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/KdaM43qdH1O9TAUGLPEhUw