數據庫在大數據領域的探索與實踐:動態存儲與查詢優化

? ? 在大數據時代,數據庫的靈活性與高效性成為數據存儲與分析的重要基石。從關系型數據庫到 NoSQL 數據庫的演進,開發者逐漸可以在結構化與非結構化數據間找到平衡。本文將聚焦大數據場景下的數據庫實踐,尤其是如何動態存儲與查詢復雜數據,并提供 SQL 示例和優化技巧。


一、大數據場景對數據庫的需求

  1. 靈活性

    數據格式多樣,如 JSON、XML 等嵌套結構需要高效存儲與解析。
  2. 性能

    大量并發查詢與寫入對數據庫性能提出更高要求。
  3. 可擴展性

    隨著數據量增長,數據庫需支持水平擴展和動態優化。

二、MySQL 的 JSON 數據支持

MySQL 自 5.7 起支持 JSON 數據類型,為動態存儲非結構化數據提供了便利。

JSON 數據類型特點:

  • 靈活性:支持嵌套對象與數組存儲。
  • 高效性:二進制格式存儲,查詢性能優于字符串處理。
  • 自動校驗:寫入時自動校驗 JSON 格式,避免存儲非法數據。

三、實戰案例:JSON 數據的存儲與查詢

1. 數據樣例

CREATE TABLE users (user_id INT PRIMARY KEY,name VARCHAR(50),config JSON
);INSERT INTO users (user_id, name, config) VALUES
(1, '張三', '{"role": "admin", "email": "zhangsan@example.com", "active": true}'),
(2, '李四', '{"role": "user", "email": "lisi@example.com", "active": false}'),
(3, '王五', '{"role": "admin", "email": "wangwu@example.com", "active": true}');

2. 查詢特定屬性

需求:查詢擁有管理員角色的用戶信息。

SELECT user_id, name, JSON_UNQUOTE(JSON_EXTRACT(config, '$.email')) AS email
FROM users
WHERE JSON_EXTRACT(config, '$.role') = 'admin';

結果:

user_idnameemail
1張三zhangsan@example.com
3王五wangwu@example.com

解析:

  • JSON_EXTRACT 提取 JSON 字段中的 role 值。
  • JSON_UNQUOTE 去除返回值中的引號。

3. 動態更新 JSON 數據

需求:將所有用戶的 active 狀態更新為 false

UPDATE users
SET config = JSON_SET(config, '$.active', false)
WHERE JSON_EXTRACT(config, '$.active') = true;

4. 刪除敏感字段

需求:從 config 中刪除 password 字段。

UPDATE users
SET config = JSON_REMOVE(config, '$.password')
WHERE JSON_SEARCH(config, 'one', 'password') IS NOT NULL;

5. 提取所有鍵名

需求:獲取 JSON 中所有鍵名。

SELECT user_id, JSON_KEYS(config) AS keys_list
FROM users;

結果:

user_idkeys_list
1["role", "email", "active"]
2["role", "email", "active"]
3["role", "email", "active"]

四、查詢優化技巧

1. 為 JSON 數據添加虛擬列

ALTER TABLE users
ADD role VARCHAR(50) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(config, '$.role'))) STORED,
ADD INDEX idx_role (role);
  • 需求:加速常用查詢。

2. 使用生成列索引

???????????????效果:將 JSON 查詢轉為普通索引查詢,提升性能。

3. 控制 JSON 嵌套深度

????????建議:嵌套過深會降低查詢效率,應保持結構扁平化。

4. 使用覆蓋索引

CREATE INDEX idx_email_role ON users (JSON_UNQUOTE(JSON_EXTRACT(config, '$.email'))(191), role);
  • 需求:減少回表查詢。
  • 效果:直接從索引中獲取查詢結果,避免讀取數據頁。

5. 分區表與水平擴展

CREATE TABLE users_2024 (user_id INT PRIMARY KEY,name VARCHAR(50),config JSON
) PARTITION BY RANGE (user_id) (PARTITION p0 VALUES LESS THAN (1000),PARTITION p1 VALUES LESS THAN (2000),PARTITION p2 VALUES LESS THAN (MAXVALUE)
);
  • 需求:對大規模用戶表按區域或時間分區。

6. 優化 JSON 查詢路徑

WITH extracted_data AS (SELECT user_id, JSON_UNQUOTE(JSON_EXTRACT(config, '$.email')) AS emailFROM users
)
SELECT * FROM extracted_data WHERE email LIKE '%example.com';
  • 需求:避免重復提取。

7. 緩存熱點查詢結果

  • 方法:將高頻查詢的結果緩存在 Redis 或 Memcached 中,降低數據庫壓力。

8. 批量操作優化

UPDATE users
SET config = JSON_SET(config, '$.active', false)
WHERE JSON_EXTRACT(config, '$.active') = true
LIMIT 1000;
  • 需求:對大量數據進行更新或刪除時,分批處理避免鎖表。

五、數據庫支持對比:MySQL、MongoDB 與 Redis

特性MySQL JSONMongoDBRedis
數據類型JSONBSON(JSON 擴展)Key-Value
查詢性能高(支持索引)極高(內存存儲)
事務支持完善一般(支持單文檔事務)基礎事務(事務塊)
擴展性一般極佳(分片與復制集)極佳(主從復制與分片)
數據持久化支持(磁盤存儲)支持(WiredTiger 引擎)支持(AOF 或 RDB)
適用場景結構化與半結構化存儲非結構化數據存儲高性能緩存與實時數據處理

六、總結

? ? 通過對 JSON 數據的支持,MySQL 在大數據存儲與查詢中表現出強大的靈活性。無論是動態更新字段、嵌套數據查詢還是優化索引設計,開發者都可以借助這些特性實現高效數據操作。

? ? 在實際應用中,選擇合適的數據庫與優化策略至關重要。MySQL 的 JSON 數據類型適合中小型項目的動態數據需求,而 MongoDB 和 Redis 則在非結構化數據存儲與實時處理場景中表現更優。

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

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

相關文章

【Python科研數據爬蟲】基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理

基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理 1 背景2 標準檢索平臺2.1 能源標準化信息平臺2.2 全國標準信息公共服務平臺3 標準信息數據的爬取與處理3.1 能源標準化信息平臺的信息爬取3.2 全國標準信息公共服務平臺的信息爬取3.3 標準信…

AWS Certified AI Practitioner 自學考試心得

學習目標: 考取 AWS Certified AI Practitioner 那什么是 AWS Certified AI Practitioner 認證 是基礎級的認證 比較簡單 — 學習內容: 1. AWS網站自學網站 極客時間免費課程:http://gk.link/a/12sJL 配合極客時間課程的章節測試檢驗自…

Ngnix介紹、安裝、實戰及用法!!!

一、Nginx簡介 1、Nginx概述 Nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理服務器,特點是占有內存少,并發能力強,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數 。 2、正向代理 正向代理:如果把局…

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2) 簡介1. TLS握手過程概述2. TLS握手過程細化3. 主密鑰(對稱密鑰)生成過程4. 密碼規范變更 簡介 主要講述了混合加密流程完成后,客戶端和服務器如何共同獲得相同的對稱密鑰…

YOLO11全解析:從原理到實戰,全流程體驗下一代目標檢測

前言 一、模型介紹 二、網絡結構 1.主干網絡(Backbone) 2.頸部網絡(Neck) 3.頭部網絡(Head) 三、算法改進 1.增強的特征提取 2.優化的效率和速度 3.更高的準確性與更少的參數 4.環境適應性強 5.…

C++ 與 Python(靜態類型語言與動態語言)

C 與 Python(靜態類型語言與動態語言) 一、說明 Python和C到底有啥區別?在使用的時候有啥特殊的益處?這種問題的意義在于:如果對語言了解越清楚,越能夠更加大膽地應用哪些極限功能,從而最大限…

Jenkins 構建流水線

在 Linux 系統上安裝 Jenkins 服務,以及配置自動化構建項目 前置準備環境:docker、docker-compose、jdk、maven 一、環境搭建 1. Jenkins 安裝 (1)拉取鏡像 # 安裝鏡像包,默認安裝最新版本 docker pull jenkins/jen…

【Java】面試題 并發安全 (1)

文章目錄 synchronized1. 基本概念與作用2. 使用方式3. 底層原理(基于monitor)4. 面試題回答要點5. 注意事項與進階理解 Java中synchronized鎖相關知識總結Java內存模型(JMM)CAS概述及重要性volatile關鍵字AQS簡介 synchronized …

前端項目 npm報錯解決記錄

1.首先嘗試解決思路 npm報錯就切換yarn , yarn報錯就先切換npm刪除 node_modules 跟 package-lock.json文件重新下載依 2. 報錯信息: Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…

深度學習中batch_size

Batch size調整和epoch/iteration的關系 訓練數據集總共有1000個樣本。若batch_size10,那么訓練完全體樣本集需要100次迭代,1次epoch。 訓練樣本10000條,batchsize設置為20,將所有的訓練樣本在同一個模型中訓練5遍,則…

Redis 數據類型全解析:基礎與進階應用場景

前言:Redis 是一個高性能的內存數據庫,支持多種數據類型,能夠高效處理各種場景的數據存儲和操作。 以下是Redis數據類型的數據結構及其應用場景的詳細說明: 基礎數據類型 1. 字符串 (String) 底層數據結構 Simple Dynamic Stri…

評分模型在路網通勤習慣分析中的應用——提出問題(1)

1、問題的由來、目標和意義 最近一段時間和公司其它業務部門討論時,發現一個有趣的交通路網問題,車輛從S點行駛到V點共用時40分鐘,這段時間內路網中的卡口攝像頭識別到了車輛通過的信息。如下圖所示: 設計師需要通過這些有限的路…

leetcode 面試經典 150 題:刪除有序數組中的重復項

鏈接刪除有序數組中的重復項題序號26題型數組解題方法雙指針難度簡單熟練度????? 題目 給你一個 非嚴格遞增排列 的數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。元素的 相對順序 應該保…

提升生產力工具

VSCODE插件 干貨:用好這13款VSCode插件,工作效率提升10倍 - 程序員檸檬 - 博客園 Sourcetrail Sourcetrail 是一個開源且免費的源碼閱讀工具,以其強大的代碼導航、可視化及跨平臺支持特性,成為開發者理解復雜代碼庫的得力助手。…

什么是 Git Hooks?

在團隊開發中,當成員提交代碼的描述信息不符合約定提交規范的時候,需要阻止當前的提交,而要實現這個目的,我們就需要先來了解一個概念,叫做 Git hooks,即Git 在執行某個事件之前或之后進行一些其他額外的操…

Go語言方法和接收器類型詳解

Go語言方法和接收器類型詳解 1. 方法接收器類型 1.1 值接收器 值接收器方法不會改變接收器的狀態,因為Go語言會在調用時復制接收器的值。因此,任何對接收器成員變量的修改都只會影響副本,而不會影響原始結構體實例。 type Person struct …

MS SQL Server 實戰 排查多列之間的值是否重復

目錄 需求 范例運行環境 數據樣本設計 功能實現 上傳EXCEL文件到數據庫 SQL語句 小結 需求 在日常的應用中,排查列重復記錄是經常遇到的一個問題,但某些需求下,需要我們排查一組列之間是否有重復值的情況。比如我們有一組題庫數據&am…

抖去推碰一碰系統技術源碼/open SDK轉發技術開發

抖去推碰一碰系統技術源碼/open SDK轉發技術開發 碰一碰智能系統#碰碰卡系統#碰一碰系統#碰一碰系統技術源頭開發 碰碰卡智能營銷系統開發是一種集成了人工智能和NFC技術的工具,碰碰卡智能營銷系統通過整合數據分析、客戶關系管理、自動化營銷活動、多渠道整合和個…

redis優化

在高并發、高性能、高可用系統中,Redis 的優化至關重要。以下是一些在面試中可以詳細說明的 Redis 優化策略,以及具體的實踐經驗和技術亮點: 1. 數據模型與結構設計優化 使用合適的數據結構 :根據業務需求選擇合適的 Redis 數據結…

WEB攻防-通用漏洞-文件上傳-js驗證-MIME驗證-user.ini-語言特征

目錄 定義 1.前端驗證 2.MIME驗證 3.htaccess文件和.user. ini 4.對內容進行了過濾,做了內容檢測 5.[ ]符號過濾 6.內容檢測php [] {} ; 7.()也被過濾了 8.反引號也被過濾 9.文件頭檢測 定義 文件上傳漏洞是指攻擊者上傳了一個可執行文件(如木馬…