電商項目_性能優化_海量數據讀寫、存儲、檢索

海量數據讀寫方式選擇

高并發讀寫場景分析

????????無論任何業務系統,無非就是兩個操作:寫和讀。 在海量數據和高并發的場景下,寫和讀就會成為系統性能的瓶頸。下面分析不同業務場景下面臨的問題:

側重“高并發讀”的系統

  • 場景1:搜索引擎。 C端用戶包括網頁發布者(寫)和網頁搜索者(讀), 但是讀和寫明顯不是一個數量級。
  • 場景2:電商的商品搜索。?
  • 場景3:電商的商品詳情

側重“高并發寫”的系統

場景1:廣告扣費系統。?

?????????廣告通常要么按瀏覽付費,要么按點擊付費(業界叫作 CPC或 CPM)。具體來說,就是廣告主在廣告平臺開通一個賬號,充一筆錢進去,然后投放自己的廣告。C端用戶看到了這個廣告后,可能點擊一次扣一塊錢(CPC);或者瀏覽這個廣告,瀏覽1000次扣10塊(CPM)。

????????扣款要盡可能實時,如果慢扣了, 就可能造成廣告主沒有錢了,但是廣告仍在播放。

同時側重“高并發讀寫”的系統

  • 場景1:秒殺系統
  • 場景2: 12306網站的火車售賣
  • 場景3:支付系統和微信紅包。 用戶需要實時查看自己的余額,這個值需要實時并且準確;另外,在轉賬場景,A /B兩個用戶余額變動也要盡可能快,并且要求強一致性。
  • 場景4:IM、微博、朋友圈。 C端用戶要進行發消息和接受消息。這種用戶規模在億級別,無論讀還是寫,要求處理都要非常及時。

高并發讀策略

本質:以空間換時間

高并發讀的特征:讀寫分析,設計出是和高并發讀的存儲結構或者數據模型。

高并發寫策略

海量數據存儲方式選擇

????????存儲系統(數據結構),往往決定了系統的上限;計算?式(算法)決定了能否發揮這個上限以及系統的下限。

選擇時考慮的因素

1. 在線業務系統 or 分析系統

2. 數據量:存量和增量,對未來數據量可以考慮兩三年的業務量

  • 1GB以下:任意存儲
  • 1~10GB(1億內):單機存儲系統的處理上限
  • 10GB以上:分布式存儲
  • TB : ?般需要事先對數據做聚合計算

3.成本:運維成本、學習成本

分析類系統常用的存儲方式

  • 一些列式數據庫,比如Hbase、Cassandra、ClickHouse 等
  • ES,?為搜索??的存儲產品

????????當數據量級超過TB 級的時候,做數據統計分析,?論使?哪種存儲系統,速度都快不了,這?的性能瓶頸主要在于磁盤IO和?絡帶寬。這么?量級的數據,?般是選擇存儲在HDFS中,配合Spark、 Hive等?數據?態圈產品,對數據進?聚合和計算。

Hadoop:是一個分布式計算的開源框架

HDFS:是Hadoop的三大核心組件之一

Hive:用戶處理存儲在HDFS中的數據,hive的意義就是把好寫的hive的sql轉換為復雜難寫的map-reduce程序。

Hbase:是一款基于HDFS的數據庫,是一種NoSQL數據庫,主要適用于海量明細數據(十億、百億)的隨機實時查詢,如日志明細、交易清單、軌跡行為等。

RocksDB

????????RocksDB是Facebook開源的?個?性能、持久化的KV存儲引擎。簡單理解成單機版的Redis.

????????Redis只是?個內存數據庫,并不是?個可靠的存儲引擎。在 Redis 中,數據寫到內存中就算成功了,其并不能保證將數據安全地保存到磁盤上。? RocksDB則是?個持久化的KV存儲引擎,它需要保證每條數據都已安全地寫到磁盤上。

????????RocksDB采?了?個?常復雜的數據存儲結構(數據結構LSM-Tree),采?了內存和磁盤混合存儲的?式,它使?磁盤來保證數據的可靠存儲的,并且會利?速度更快的內存來提升讀寫性能

  • MemTable(內存)有?個固定的上限??,?般是32MB; SSTable容量也是有限的。
  • Log : 順序寫磁盤,對應的磁盤WAL日志。唯?作?就是從故障中恢復系統數據
  • 有?個后臺線程,不停地把 ImmutableMemTable復制到磁盤?件中,然后釋放內存空間

  • 寫入:MemTable(有序表) ->Immutable MemTable(不允許再寫) ->磁盤文件(SSTable)-> 合并到下一層(并刪除已合并的SSTable)

  • 查找:分層查找。MemTable/Immutable MemTable -> SSTable -> 下一層SSTable

ES檢索

????????ElasticSearch(簡稱ES)是一個分布式、RESTful 風格的搜索和數據分析引擎,是用Java開發并且是當前最流行的開源的企業級搜索引擎,能夠達到近實時搜索,穩定,可靠,快速,安裝使用方便。客戶端支持Java、.NET(C#)、PHP、Python、Ruby等多種語言。

應用場景

  • 站內搜索
  • 日志管理與分析
  • 大數據分析
  • 應用性能監控
  • 機器學習

站內檢索使用步驟

1. 確定業務檢索內容

????????比如,商城首頁,根據關鍵字查詢、根據品牌查詢、商品類別、商品屬性信息、價格區間、是否有庫存、排序(銷量、價格、上架時間等)

2. 文檔建模

  • 確定要做分詞的字段,分詞器
  • 確定keyword(不需要分詞)
  • 商戶與屬性的關聯關系

3. 定義mapping, 創建索引庫

4. 索引文檔(檢索文檔)

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

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

相關文章

RabbitMQ面試精講 Day 9:優先級隊列與惰性隊列

【RabbitMQ面試精講 Day 9】優先級隊列與惰性隊列 文章標簽 RabbitMQ,優先級隊列,惰性隊列,消息隊列,面試技巧,系統架構 文章簡述 本文是"RabbitMQ面試精講"系列第9天,深入解析優先級隊列與惰性隊列的實現原理與實戰應用。文章詳細講解優先級隊列的排…

[硬件電路-121]:模擬電路 - 信號處理電路 - 模擬電路中常見的難題

模擬電路設計是電子工程中極具挑戰性的領域,其核心難題源于信號的連續性、元件的非理想特性以及環境干擾的復雜性。以下是模擬電路中常見的難題及其技術本質與解決方案:1. 噪聲與干擾:信號的“隱形殺手”技術本質:模擬信號對微小電…

Java 大視界 -- Java 大數據在智能交通智能停車誘導與車位共享優化中的應用(381)

Java 大視界 -- Java 大數據在智能交通智能停車誘導與車位共享優化中的應用(381)引言:正文:一、智能停車的 “老大難”:不只是 “車位少” 那么簡單1.1 車主與車位的 “錯位困境”1.1.1 信息滯后的 “睜眼瞎”1.1.2 車…

基于落霞歸雁思維框架的自動化測試實踐與探索

基于落霞歸雁思維框架的自動化測試實踐與探索 在當今快速發展的軟件開發領域,自動化測試已成為提高軟件質量和開發效率的關鍵環節。本文將結合落霞歸雁的思維框架——“觀察現象 → 找規律 → 應用規律 → 實踐驗證”,探討如何將其應用于自動化測試領域&…

Unity Shader編程進階:掌握高階渲染技術 C# 實戰案例

Unity Shader編程完全入門指南:從零到實戰 C# 本文將深入探討Unity Shader編程的高級技術,包括自定義光照模型、后處理效果、GPU實例化、表面著色器深度應用等,幫助開發者提升渲染效果與性能優化能力。 提示:內容純個人編寫&#…

(論文速讀)Text-IF:基于語義文本引導的退化感知交互式圖像融合方法

論文信息論文題目:Text-IF: Leveraging Semantic Text Guidance for Degradation-Aware and Interactive Image Fusion(Text-IF:利用語義文本指導退化感知和交互式圖像融合)會議:CVPR2024摘要:圖像融合的目的是將不同源…

python創建一個excel文件

以下是使用Python根據指定名稱創建Excel文件的兩種實現方法,根據需求選擇適合的方案:方法一:使用pandas庫(適合結構化數據) # 安裝依賴(命令行執行) # pip install pandas openpyxlimport panda…

C++高頻知識點(十四)

文章目錄66. 程序什么時候應該使用多線程,什么時候單線程效率高?67. 死鎖的原因和避免死鎖的避免預防死鎖:破壞持有并等待條件68. TCP擁塞控制四個階段輪換過程描述69. C的內存管理70. 構造函數可以是虛函數嗎,析構函數呢66. 程序…

淺窺Claude-Prompting for Agents的Talk

Prompting for Agents先說一句:顏值這么高,你倆要出道啊。此圖基本就是claude倡導的agent prompt結構了,可以看到經過一年時間的演變,基本都是follow這個結構去寫prompt。我比較喜歡用Role→react→task→histroy→few shot→rule…

【MySQL04】:基礎查詢

MySQL的基本查詢表的增刪查改 insert(插入) insert [info] table_name [(colume, [,colume] ...)] values (value_list) ...對于value_list我們通過,作為分隔符 插入替換我們使用on duplicate key update, 表示如果存在主鍵沖突, 會進行更新, 這個字段后面還有寫更新的字段repl…

NGINX反向代理golang后端服務

nginx配置參考(/etc/nginx/sites-available路徑下創建配置文件) server {listen 80; # 監聽80端口server_name ip; # 你的域名或IPlocation / {root /var/www/test_page/;index index.html; # 默認文件try_files $uri $uri/ /index.html; # 單頁…

【秋招筆試】2025.08.03蝦皮秋招筆試-第二題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍在線刷題 bishipass.com 02. 城市規劃的連通網絡 問題描述 A先生是一名城市規劃師,他負責設計一個智能城市的通信網絡。城市被劃分為一個 n m n \times m n

JVM 01 運行區域

Java 虛擬機 跨平臺 虛擬機隱藏平臺差異,解決不同平臺代碼運行結果不一致問題,實現Write Once, Run Anywhere,實現用戶代碼跨平臺。它本身是一個操作系統上的應用程序,將字節碼文件翻譯成特定機器的機器碼。 Java 虛擬機 運行時內…

[學習筆記-AI基礎篇]03_Transfommer與GPT架構學習

介紹GPT-1,GPT-2,GPT-3,GPT-4 GPT-1 介紹2018年6月,OpenAI公司發表了論文"|mproving Language Understanding by Generative Pre-training”《用生成式預訓練提高模型的語言理解力》,推出了具有1.17億個參數的GPT-1(Generative Pre-trainingTransformers,生成式預訓練變換…

HPNetworkCheckControl.dll HPEnvRes.dll hpcasl.dll HpBwcDecode.dll HpBlogic.dll hpbhilxres.dll

在使用電腦系統時經常會出現丟失找不到某些文件的情況,由于很多常用軟件都是采用 Microsoft Visual Studio 編寫的,所以這類軟件的運行需要依賴微軟Visual C運行庫,比如像 QQ、迅雷、Adobe 軟件等等,如果沒有安裝VC運行庫或者安裝…

飛算 JavaAI:給需求分析裝上 “智能大腦“

在軟件開發的漫長旅途中,需求分析是至關重要的起點,其精準度與效率直接關乎整個項目的成敗。傳統的需求分析依賴人工梳理,不僅耗費大量時間與精力,還時常出現理解偏差和邏輯漏洞。而飛算 JavaAI 的橫空出世,猶如為需求…

javacc學習筆記 01、JavaCC本地安裝與測試

文章目錄前言本章節源碼一、什么是javacc二、Mac環境安裝javacc三、javacc測試案例1、編寫詞法描述文件2、借助javacc命令來處理demo01.jj文件3、idea配置輸入參數,運行Adder類方法四、javacc文件編譯類描述4.1、demo1.jj文件生成內容描述&解析轉換過程4.2、解析…

Java基礎-stream流的使用

目錄 案例要求: 實現思路: 代碼: 總結: 案例要求: 實現思路: 創建一個包含學生姓名(String)和選擇地址變量(集合)的實體類,然后將題干數據封裝到集合,然后進行stream操作 代碼: import ja…

virtualbox+UBuntu20.04+內存磁盤擴容

寫在前面:1.由于我寫博客都是偏向個人筆記性質的,所以寫的比較粗糙,如果有疑問私信評論我即可。2.這篇博客的解決方法應該算是“全網”首發吧,因為我為了磁盤擴容真的找了好多相關資料,但是基本都沒有用。如果你也是找…

關于對Spring的理解,以及對spring中的兩大核心概念AOP和IOC的理解

我們先來說一說Spring,從總體上Spring就是一個基礎框架,同時Spring給我們提供了一個Bean容器,用來裝載和管理具體的Bean對象,你像我們之前創建對象的時候就是通過new關鍵字來實現的,但是現在我們只需要告訴容器有哪些對…