B.50.10.06-NoSQL數據庫與電商應用

NoSQL數據庫核心原理與電商應用實戰

核心思想: NoSQL (Not Only SQL) 數據庫是為了解決傳統關系型數據庫在超大規模數據高并發靈活數據模型方面的不足而設計的。它們通過犧牲部分一致性(通常是最終一致性)和事務的嚴格性,來換取極高的性能和可擴展性。


第1章:NoSQL核心概念與選型指南

1.1. NoSQL核心理念

NoSQL數據庫的出現是為了解決傳統關系型數據庫在以下場景中的局限性:

  • 超大規模數據存儲:傳統關系型數據庫在處理PB級數據時性能急劇下降
  • 高并發讀寫:關系型數據庫的鎖機制和事務處理在高并發場景下成為瓶頸
  • 靈活數據模型:關系型數據庫的嚴格表結構難以適應快速變化的業務需求

NoSQL通過CAP理論的權衡(通常選擇AP而犧牲C),實現了極高的性能和可擴展性。

1.2. NoSQL數據庫分類與選型

類型代表產品核心優勢典型應用場景數據一致性
鍵值存儲Redis, Memcached極高的讀寫性能,豐富的數據結構分布式緩存、會話存儲、分布式鎖、排行榜最終一致性
文檔數據庫MongoDB靈活的類JSON數據模型,強大的查詢語言內容管理系統、用戶畫像、移動應用后端最終一致性
搜索引擎Elasticsearch, Solr強大的全文檢索和實時數據分析能力日志分析(ELK)、商品搜索、應用內搜索最終一致性
列式數據庫HBase, Cassandra極佳的水平擴展能力,適合海量數據寫入物聯網數據、用戶行為日志、消息流數據最終一致性/強一致性(Cassandra)

1.3. NoSQL與關系型數據庫的對比

特性關系型數據庫NoSQL數據庫
數據模型嚴格的表結構,需要預先定義靈活的數據模型,可動態調整
擴展性垂直擴展為主,水平擴展困難天然支持水平擴展
事務支持ACID事務BASE理論,最終一致性
查詢語言SQL各自特定的查詢語言
性能中等極高(針對特定場景)
一致性強一致性最終一致性

第2章:Redis核心原理與電商應用

核心定位: 基于內存的高性能鍵值數據庫,通常用作分布式緩存來降低后端數據庫壓力。

2.1. Redis核心數據結構

Redis支持多種數據結構,每種都有其特定的應用場景:

  • String: 最基本類型,可以是字符串、整數或浮點數。用于緩存、計數器。
  • Hash: 字段-值(field-value)對的集合,適合存儲對象。
  • List: 字符串列表,按插入順序排序。可實現隊列、棧。
  • Set: 無序的唯一字符串集合。用于標簽、好友關系。
  • Sorted Set (ZSet): 每個元素關聯一個分數,按分數排序的集合。用于排行榜、帶權重的任務隊列。
  • Bitmaps: 位圖,用于統計活躍用戶等場景。
  • HyperLogLog: 用于基數統計,如統計網站UV。
  • Geo: 地理位置相關數據結構。

2.2. Redis持久化機制

Redis提供了兩種持久化機制,可根據業務需求選擇:

  • RDB (Redis Database): 在指定時間間隔內生成數據集的快照
    • 優點: 文件緊湊,恢復速度快,適合備份
    • 缺點: 可能丟失最后一次快照后的數據
  • AOF (Append Only File): 記錄所有寫操作命令
    • 優點: 數據最完整,支持多種同步策略
    • 缺點: 文件體積大,恢復速度慢
  • 生產環境建議: RDB和AOF同時開啟,結合使用

2.3. Redis高可用方案

  1. 主從復制: 實現讀寫分離和數據備份
  2. 哨兵模式 (Sentinel): 自動故障檢測和主從切換
  3. 集群模式 (Cluster): 數據分片和高可用性

2.4. 緩存三大問題與對策

  • 緩存穿透: 查詢一個不存在的數據,導致請求繞過緩存,直接打到數據庫。

    • 對策: 1. 緩存空值: 將數據庫返回的空結果也緩存起來,但設置較短的過期時間。2. 布隆過濾器: 在訪問緩存前,通過布隆過濾器快速判斷數據是否存在,攔截大量非法請求。
  • 緩存擊穿: 一個熱點Key在失效的瞬間,大量并發請求同時涌入,直接打到數據庫。

    • 對策: 1. 互斥鎖: 只允許一個線程去查詢數據庫并回寫緩存,其他線程等待。2. 熱點數據永不過期
  • 緩存雪崩: 大量Key在同一時間集中失效,導致數據庫壓力瞬時劇增。

    • 對策: 1. 過期時間打散: 在基礎過期時間上增加一個隨機值。2. 服務熔斷/降級: 暫時關閉非核心功能,保證核心服務可用。

2.5. Redis分布式鎖實現

Redis在分布式系統中常用于實現分布式鎖,主要利用SET key value NX EX seconds原子命令:

SET lock_key random_value NX EX 30

關鍵要點:

  1. Value要唯一: value應存入一個唯一的ID,釋放鎖時先GET比對,防止誤刪他人的鎖
  2. 設置過期時間: 防止客戶端宕機導致死鎖
  3. 原子性操作: 使用Lua腳本保證釋放鎖的原子性

生產級解決方案: 使用Redisson等成熟客戶端,其提供了看門狗機制自動續期,避免業務執行時間超過鎖過期時間的問題。


第3章:MongoDB核心原理與電商應用

核心定位: 面向文檔的數據庫,以類JSON的BSON格式存儲數據,模式靈活,非常適合敏捷開發和半結構化數據。

3.1. MongoDB核心概念

  • 文檔 (Document): 數據基本單元,類似于JSON對象。
  • 集合 (Collection): 文檔的集合,類似于關系數據庫的表。
  • 數據庫 (Database): 集合的容器,一個MongoDB實例可以包含多個數據庫。
  • ObjectId: MongoDB默認的主鍵類型,包含時間戳、機器標識、進程ID和計數器。

3.2. MongoDB索引機制

MongoDB支持多種索引類型:

  • 單字段索引: 對單個字段建立索引
  • 復合索引: 對多個字段建立索引,遵循最左前綴原則
  • 多鍵索引: 對數組字段建立索引
  • 文本索引: 支持文本搜索
  • 地理空間索引: 支持地理位置查詢

3.3. 聚合管道 (Aggregation Pipeline)

MongoDB的聚合管道是一個強大的數據處理框架,允許對文檔進行多階段的轉換和分析:

db.orders.aggregate([{$match: { status: "completed" } // 第一階段:篩選已完成的訂單},{$group: { // 第二階段:按用戶ID分組,并計算總金額_id: "$userId",totalAmount: { $sum: "$amount" }}},{$sort: { totalAmount: -1 } // 第三階段:按總金額降序排序}
])

3.4. MongoDB高可用方案

  1. 副本集 (Replica Set): 自動故障轉移和數據冗余
  2. 分片集群 (Sharded Cluster): 水平擴展,處理海量數據

第4章:Elasticsearch核心原理與電商應用

核心定位: 基于Lucene庫的分布式搜索引擎,提供強大的全文檢索、實時分析和可擴展性。

4.1. 核心原理:倒排索引

傳統的關系數據庫索引是"文檔 -> 單詞",而倒排索引是**“單詞 -> 文檔列表”。ES會對文檔內容進行分詞**,然后為每個詞條創建一個包含它的所有文檔的列表。這使得基于關鍵詞的搜索變得極其高效。

倒排索引
文檔
Doc 1, Doc 2
brown
Doc 1
fox
Doc 2
jumps
Doc 1: The quick brown fox
Doc 2: A brown dog jumps

4.2. 核心概念

  • 索引 (Index): 類似于關系數據庫的數據庫
  • 類型 (Type): 類似于關系數據庫的表(在ES 7.x后已廢棄)
  • 文檔 (Document): 類似于關系數據庫的行
  • 字段 (Field): 類似于關系數據庫的列
  • 映射 (Mapping): 定義字段的數據類型和屬性
  • 分片 (Shard): 索引的水平分割單元
  • 副本 (Replica): 分片的備份,提供高可用性

4.3. 寫入與查詢流程

  • 寫入流程: 客戶端請求 -> 協調節點 -> 路由到主分片 -> 主分片寫入 -> 同步到副本分片 -> 確認。
  • 查詢DSL (Domain Specific Language): ES提供了一套豐富的基于JSON的查詢語言,可以實現從簡單匹配到復雜的多條件、多層次的組合查詢。

4.4. 性能優化關鍵點

  • 避免深度分頁: 使用scrollsearch_after來處理大量數據的分頁,而不是from + size
  • 冷熱數據分離: 將訪問頻繁的熱數據存儲在高性能的SSD節點,將不常用的冷數據存儲在低成本的HDD節點。
  • 合理設置分片: 分片不是越多越好,過多的分片會增加管理開銷。通常建議單個分片大小在10GB到50GB之間。

第5章:HBase核心原理與電商應用

核心定位: 基于Hadoop的分布式列式數據庫,適合海量數據的隨機讀寫。

5.1. HBase核心概念

  • RowKey: 行鍵,HBase中數據的唯一標識,按字典序存儲
  • Column Family: 列族,相關列的集合
  • Column Qualifier: 列限定符,列族下的具體列
  • Timestamp: 時間戳,用于版本控制
  • Region: 表的水平分割單元

5.2. RowKey設計原則

RowKey設計是HBase性能的關鍵:

  1. 避免熱點: 如果RowKey是連續的(如時間戳),會導致所有寫操作集中在單個RegionServer,形成熱點。通常需要散列化或反轉RowKey。
  2. 查詢效率: 將常用于查詢的字段放在RowKey中,可以實現高效的范圍掃描。

5.3. HBase架構

  • HMaster: 管理RegionServer,處理元數據操作
  • RegionServer: 存儲實際數據,處理讀寫請求
  • ZooKeeper: 協調服務,維護集群狀態

第6章:電商場景NoSQL應用實踐

6.1. 商品系統

  • Redis: 緩存熱門商品信息,存儲商品庫存
  • MongoDB: 存儲商品詳情、分類信息
  • Elasticsearch: 商品搜索功能

6.2. 用戶系統

  • Redis: 存儲用戶會話、Token信息
  • MongoDB: 存儲用戶基本信息、地址信息
  • HBase: 存儲用戶行為日志

6.3. 訂單系統

  • Redis: 分布式鎖防止超賣,緩存訂單狀態
  • MongoDB: 存儲訂單詳情
  • HBase: 存儲訂單流水日志

6.4. 推薦系統

  • Redis: 存儲用戶實時行為數據
  • MongoDB: 存儲用戶畫像數據
  • HBase: 存儲用戶歷史行為數據

第7章:核心概念

Q: Redis的分布式鎖如何實現?需要注意什么?
A: 主要利用SET key value NX EX seconds這個原子命令。NX保證只有鍵不存在時才設置成功(獲取鎖),EX設置過期時間防止死鎖。注意事項: 1. Value要唯一: value應存入一個唯一的ID,釋放鎖時先GET比對,防止誤刪他人的鎖。2. 鎖續期: 對于長時間任務,需要一個"看門狗"機制來為鎖自動續期。Redisson等客戶端已完美實現這些功能。

Q: Elasticsearch的寫入流程為什么是近實時的?
A: ES的寫操作首先是寫入內存中的buffertranslog(事務日志)。數據只有在refresh操作后(默認1秒一次),才會從buffer生成一個新的段(Segment)并刷新到文件系統緩存中,此時數據才能被搜索到。所以它不是嚴格的實時,而是"近實時"。

Q: HBase的RowKey為什么要精心設計?
A: HBase是圍繞RowKey構建的,數據按RowKey的字典序物理存儲。一個好的RowKey設計至關重要:1. 避免熱點: 如果RowKey是連續的(如時間戳),會導致所有寫操作集中在單個RegionServer,形成熱點。通常需要散列化或反轉RowKey。2. 查詢效率: 將常用于查詢的字段放在RowKey中,可以實現高效的范圍掃描。

Q: MongoDB的副本集是如何保證高可用的?
A: MongoDB副本集通過以下機制保證高可用:

  1. 自動故障檢測: 副本集成員間通過心跳檢測彼此狀態
  2. 選舉機制: 當主節點故障時,剩余節點會進行選舉產生新的主節點
  3. 數據同步: 從節點通過oplog同步主節點的數據變更
  4. 讀寫分離: 應用可以配置讀取從節點,分擔主節點壓力

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95791.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95791.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95791.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

把開發環境丟云上,我的電腦風扇再也沒轉過!

Hello,兄弟們,我來啦作為一個天天搬磚的程序員,每天最讓我心態爆炸的是啥?不是產品又改需求,也不是 Bug 藏得深,而是TMD——配!環!境!新項目 git clone 下來,…

驅動ft232h通信

FT232H是一個單通道USB 2.0高速(480Mb/s)轉換為UART/FIFO IC,具有多種工業標準串行或并行接口配置能力。 1.實驗板卡 FPGA型號: FT232H型號: FT232H SINGLE CHANNEL HI-SPEED USB TO MULTIPURPOSE UART/FIFO IC Da…

隔空盜刷、AI釣魚、代理劫持…金融黑產竟進化至此?

【導讀】中國工商銀行發布的《2024網絡金融黑產研究報告》,以深度洞察拆解黑產攻擊“新變種”、勾勒防護新路徑,自發布以來,成為金融安全行業的重要參考坐標。本文會提煉出報告中黑產攻擊的五大技術演變與體系化防護思路,再結合金…

服務器為啥離不開傳感器?一文看懂數據中心“隱形守護者”的關鍵角色

在現代數據中心或企業機房中,服務器不僅僅是“跑程序”的機器,它們還是一整套復雜系統的一部分。為了保證這些服務器穩定、高效、安全地運行,傳感器成了不可或缺的角色。那么,服務器為啥要有傳感器?這些傳感器到底是干…

React JSX 語法講解

🚀 React JSX 語法講解 1. 課程概述 本課程旨在系統講解 JSX(JavaScript XML) 的核心概念與實戰應用。JSX 是 React 的核心語法擴展,它允許我們在 JavaScript 中編寫類似 HTML 的結構,使得構建用戶界面變得直觀和高效。…

軟件安裝教程(四):在 Windows 上安裝與配置 MATLAB(超詳細)

文章目錄前言1. 安裝前準備(必看)2. 下載 MATLAB(推薦在線安裝)3. 在 Windows 上安裝(詳細步驟)4. 激活 MATLAB(在線與離線)5. 首次啟動與界面入門6. 推薦的基本配置(讓環…

【運維自動化-標準運維】如何創建流程嵌套(子流程)

什么是子流程節點 標準運維里的流程節點有兩類:標準插件節點和子流程節點。子流程節點實際上也是一個流程,比如某個業務線做全網更新時需要更新多個模塊,那每個模塊的更新流程可以稱之為一個子流程。在總流程里直接添加子流程,就通…

clickhouse遷移工具clickhouse-copier

原來的集群沒有高可用而且配置很低,所有準備將一個3分片1副本集群遷到1分片2副本的高配置集群,數據量比較大。 雖然官方已經標記clickhouse-copier已經過時,但為了方便和高效還是用了copier,效果還挺好 以下是使用步驟&#xff1a…

高頻超聲波傳感器:以精準感知重塑未來科技生態

在智能制造的浪潮中,高頻超聲波傳感器正以“隱形工程師”的角色,重新定義著工業檢測、醫療診斷與環境監測的邊界。這款融合了壓電材料科學與微納電子技術的精密儀器,憑借其亞毫米級測量精度與納秒級響應速度,正在成為高端裝備制造…

殘差連接與歸一化結合應用

殘差連接(Residual Connection / Skip Connection)和歸一化(Normalization)的結合,是現代深度學習模型(尤其是深度神經網絡和Transformer架構)成功的關鍵因素之一。 核心概念回顧殘差連接 (Resi…

K8s集群+Rancher Server:部署DolphinScheduler 3.2.2集群

本文手把手演示了如何在 K8s Rancher 環境中快速拉起一套生產可用的 Apache DolphinScheduler 3.2.2 集群。全文圍繞“鏡像加速、依賴本地化、存儲持久化”三大痛點展開,附有詳細的代碼解析,收藏細看吧! 環境準備 1、軟件準備2、環境規劃部署…

查詢語言的進化:SQL之后,為什么是GQL?數據世界正在改變

數據是現代世界的核心驅動力。 在數據驅動的世界里,查詢語言就像人與數據溝通的橋梁。 如何高效地獲取、操作和理解數據,取決于查詢語言的演進。 自20世紀70年代關系型數據庫興起以來,SQL(Structured Query Language&#xff0…

AgentThink:一種在自動駕駛視覺語言模型中用于工具增強鏈式思維推理的統一框架

文章目錄摘要1. 引言2. 相關工作2.1 自動駕駛中的語言模型2.2 自動駕駛中的視覺問答3. 方法3.1 數據生成流水線3.2 兩階段訓練流程3.2.1 基于 SFT 的推理預熱3.2.2 基于 RLFT 的推理增強3.3 推理與評估4. 實驗4.1 主要實驗結果4.2 工具使用分析4.3 消融實驗4.4 泛化性評估5. 結…

Bug 排查日記:打造高效問題定位與解決的技術秘籍

一、引言在軟件開發的漫漫征程中,Bug 如影隨形,成為開發者們必須跨越的一道道障礙。它們或如微小的瑕疵,影響用戶體驗;或似隱藏的炸彈,引發系統故障,導致嚴重后果。高效排查 Bug,不僅是保障軟件…

使用 Sentry 為 PHP 和 Web 移動小程序提供多平臺錯誤監控

今天我在 reddit 上看到 Sentry 的推廣,想到 19 年我第一次在公司自研產品b2b2c上使用 Sentry 的經歷,后面在其他項目上多次使用Sentry,今天就順手分享一下在 Laravel 項目中接入 Sentry 的實踐心得。現代項目往往涉及 Web、移動端和小程序&a…

Python包管理工具全對比:pip、conda、Poetry、uv、Flit深度解析

在Python開發中,包的管理和使用是重要環節,現如今python包管理工具眾多,如何選擇合適的管理工具?常用的工具有pip、conda、Poetry、uv、Flit,下面這些工具進行詳細對比分析。一、工具概覽對比工具類型開發者主要特點適…

車載診斷架構 --- Service 14一丟丟小匯總

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做你把時間花在哪里,你的人生就在哪里。千萬別看見別人發光,就覺得自己暗淡。人生如逆旅,你我皆行人。唯有不斷閱己、越己、悅己才能活出生命的意…

Struts2 工作總結

一 in,在SQL中,IN 是一個條件操作符,用于指定多個可能的值,通常用在 WHERE 子句中。它的作用是檢查某個字段的值是否在給定的值列表中,相當于多個 OR 條件的簡寫形式。不使用 IN(冗長)SELECT * …

MQTT 認證與授權機制實踐(二)

四、實戰案例:主流 Broker 的認證授權配置指南(一)EMQ X:企業級物聯網 Broker 的安全方案1. 認證配置(用戶名密碼 證書)EMQ X 作為一款企業級物聯網 Broker,在安全認證方面提供了豐富且靈活的配…

多路轉接介紹及代碼實現

目錄 1.多路轉接技術的產生背景 2.select 3.poll 3.epoll 1.多路轉接技術的產生背景 一個技術的出現必然有它要解決的問題,那么多路轉接解決的問題是什么嗯? 我們知道,一個進程里面有一個文件描述符表管理這個進程所打開的文件,我們進行網絡通信的時候,本質就是創建一個…