数据库在大数据领域的探索与实践:动态存储与查询优化

    在大数据时代,数据库的灵活性与高效性成为数据存储与分析的重要基石。从关系型数据库到 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.mzph.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.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件(如木马…