新闻详情

新闻详情

首页 / 资讯中心 / 详情

KES 数据类型与JSONB高级应用:灵活存储与高效查询

发布时间:2026/9/8 10:14:50来源:尧图网络
KES 数据类型与JSONB高级应用:灵活存储与高效查询
KES 数据类型与JSONB高级应用灵活存储与高效查询前言现代应用系统对数据存储的需求越来越多样化除了传统的结构化数据还需要处理半结构化数据、文档数据甚至地理位置数据。KES提供了丰富的数据类型支持特别是JSONB类型为灵活存储和高效查询提供了强大能力。本篇内容深入讲解KES的数据类型体系重点剖析JSONB的高级应用包括存储优化、索引策略、查询技巧以及与其他数据类型的结合使用。全文以实际操作为主结合大量真实案例。如果你需要处理复杂的数据结构或者希望提升JSON数据的查询性能相信这篇内容对你会有帮助。一、数据类型体系概览KES提供了完整的数据类型体系满足各种数据存储需求。基础数据类型-- 数值类型CREATETABLEnumeric_demo(idSERIAL,int_colINTEGER,bigint_colBIGINT,numeric_colNUMERIC(10,2),float_colREAL,double_colDOUBLEPRECISION);-- 字符串类型CREATETABLEstring_demo(idSERIAL,char_colCHAR(10),varchar_colVARCHAR(100),text_colTEXT);-- 日期时间类型CREATETABLEdatetime_demo(idSERIAL,date_colDATE,time_colTIME,timestamp_colTIMESTAMP,timestamptz_col TIMESTAMPTZ,interval_colINTERVAL);-- 布尔类型CREATETABLEboolean_demo(idSERIAL,is_activeBOOLEAN,is_deletedBOOLEANDEFAULTFALSE);特殊数据类型-- UUID类型CREATETABLEuuid_demo(id UUIDDEFAULTgen_random_uuid(),nameVARCHAR(100));INSERTINTOuuid_demo(name)VALUES(test);-- 数组类型CREATETABLEarray_demo(idSERIAL,tagsTEXT[],scoresINTEGER[]);INSERTINTOarray_demo(tags,scores)VALUES(ARRAY[数据库,KES,性能],ARRAY[85,90,88]);-- 范围类型CREATETABLErange_demo(idSERIAL,date_range DATERANGE,num_range INT4RANGE);INSERTINTOrange_demo(date_range,num_range)VALUES([2026-01-01, 2026-12-31],[1, 100]);二、JSONB数据类型详解JSONB是KES对JSON数据的高级支持相比JSON类型JSONB在存储时进行解析并支持索引查询性能更优。JSONB基础操作-- 创建包含JSONB字段的表CREATETABLEproducts(idSERIALPRIMARYKEY,nameVARCHAR(200),attributes JSONB,created_atTIMESTAMPDEFAULTnow());-- 插入JSONB数据INSERTINTOproducts(name,attributes)VALUES(iPhone 15,{brand: Apple, price: 7999, storage: 256, color: black}),(MacBook Pro,{brand: Apple, price: 14999, memory: 16, storage: 512}),(Galaxy S24,{brand: Samsung, price: 6999, storage: 128, color: white});JSONB查询操作符-- - 操作符获取JSON对象字段SELECTname,attributes-brandASbrandFROMproducts;-- - 操作符获取JSON对象字段的文本值SELECTname,attributes-brandASbrandFROMproducts;-- # 操作符获取嵌套JSON对象SELECTname,attributes#{brand} AS brandFROMproducts;-- # 操作符获取嵌套JSON对象的文本值SELECTname,attributes#{brand} AS brandFROMproducts;JSONB包含与存在操作符-- 操作符JSONB包含SELECT*FROMproductsWHEREattributes {brand: Apple};-- 操作符JSONB被包含SELECT*FROMproductsWHERE{brand: Apple, price: 7999} attributes;-- ? 操作符键是否存在SELECT*FROMproductsWHEREattributes ?color;-- ?| 操作符任意键是否存在SELECT*FROMproductsWHEREattributes ?|ARRAY[color,memory];-- ? 操作符所有键是否都存在SELECT*FROMproductsWHEREattributes ?ARRAY[brand,price,storage];三、JSONB索引策略合理的索引策略是提升JSONB查询性能的关键。GIN索引-- 创建GIN索引CREATEINDEXidx_products_attributesONproductsUSINGgin(attributes);-- 指定操作符类的GIN索引CREATEINDEXidx_products_attributes_jsonbONproductsUSINGgin(attributes jsonb_path_ops);-- 查看索引使用情况SELECTindexname,idx_scan,idx_tup_readFROMsys_stat_user_indexesWHEREtablenameproducts;部分索引-- 为特定条件创建部分索引CREATEINDEXidx_products_appleONproducts(attributes)WHEREattributes {brand: Apple};-- 查询时自动使用部分索引SELECT*FROMproductsWHEREattributes {brand: Apple}ANDattributes-price7999;表达式索引-- 为JSONB字段创建表达式索引CREATEINDEXidx_products_brandONproducts((attributes-brand));CREATEINDEXidx_products_priceONproducts(((attributes-price)::NUMERIC));-- 使用索引查询SELECT*FROMproductsWHEREattributes-brandAppleAND(attributes-price)::NUMERIC7000;四、JSONB高级查询技巧聚合查询-- 统计各品牌产品数量SELECTattributes-brandASbrand,count(*)ASproduct_countFROMproductsGROUPBYattributes-brandORDERBYproduct_countDESC;-- 计算平均价格SELECTattributes-brandASbrand,avg((attributes-price)::NUMERIC)ASavg_priceFROMproductsGROUPBYattributes-brand;-- 统计属性分布SELECTkey,count(*)ASoccurrenceFROMproducts,jsonb_each(attributes)GROUPBYkeyORDERBYoccurrenceDESC;嵌套查询-- 处理嵌套JSONB数据CREATETABLEorders(idSERIAL,order_info JSONB);INSERTINTOorders(order_info)VALUES({customer: {name: 张三, age: 30}, items: [{product: iPhone, qty: 1}, {product: Case, qty: 2}]});-- 查询嵌套字段SELECTorder_info-customer-nameAScustomer_name,order_info-customer-ageAScustomer_ageFROMorders;-- 展开JSONB数组SELECTjsonb_array_elements(order_info-items)-productASproduct,(jsonb_array_elements(order_info-items)-qty)::INTASquantityFROMorders;JSONB更新操作-- 更新JSONB字段UPDATEproductsSETattributesjsonb_set(attributes,{price},8999)WHEREid1;-- 添加新字段UPDATEproductsSETattributesattributes||{warranty: 2年}WHEREid1;-- 删除字段UPDATEproductsSETattributesattributes-colorWHEREid1;五、实战案例解析场景一动态属性存储某电商系统需要为不同类型的商品存储动态属性。-- 创建商品表CREATETABLEcatalog(idSERIALPRIMARYKEY,categoryVARCHAR(50),nameVARCHAR(200),properties JSONB,created_atTIMESTAMPDEFAULTnow());-- 插入不同类别的商品INSERTINTOcatalog(category,name,properties)VALUES(手机,iPhone 15,{brand: Apple, screen: 6.1英寸, camera: 4800万像素, battery: 3279mAh}),(笔记本,MacBook Pro,{brand: Apple, screen: 14英寸, cpu: M3 Pro, memory: 16GB}),(平板,iPad Air,{brand: Apple, screen: 10.9英寸, chip: M1, storage: 64GB});-- 创建GIN索引CREATEINDEXidx_catalog_propertiesONcatalogUSINGgin(properties);-- 查询特定属性的商品SELECTname,properties-brandASbrandFROMcatalogWHEREproperties {brand: Apple}AND(properties-screen)::TEXTLIKE%英寸%;场景二配置信息管理某系统使用JSONB存储应用配置信息。-- 创建配置表CREATETABLEapp_config(idSERIALPRIMARYKEY,app_nameVARCHAR(100),config JSONB,updated_atTIMESTAMPDEFAULTnow());-- 插入配置INSERTINTOapp_config(app_name,config)VALUES(web_app,{database: {host: localhost, port: 54321}, cache: {enabled: true, ttl: 3600}}),(mobile_app,{api: {endpoint: https://api.example.com, timeout: 30}});-- 查询配置SELECTapp_name,config-database-hostASdb_host,config-database-portASdb_portFROMapp_configWHEREapp_nameweb_app;-- 更新配置UPDATEapp_configSETconfigjsonb_set(config,{cache,ttl},7200)WHEREapp_nameweb_app;场景三日志数据分析某系统使用JSONB存储应用日志。-- 创建日志表CREATETABLEapp_logs(idSERIALPRIMARYKEY,log_levelVARCHAR(20),messageTEXT,context JSONB,created_atTIMESTAMPDEFAULTnow());-- 插入日志INSERTINTOapp_logs(log_level,message,context)VALUES(ERROR,数据库连接失败,{host: db1, port: 54321, retry: 3}),(WARN,响应时间过长,{endpoint: /api/users, duration: 2500}),(INFO,用户登录成功,{user_id: 1001, ip: 192.168.1.100});-- 创建索引CREATEINDEXidx_logs_contextONapp_logsUSINGgin(context);CREATEINDEXidx_logs_level_timeONapp_logs(log_level,created_atDESC);-- 查询特定条件的日志SELECT*FROMapp_logsWHERElog_levelERRORANDcontext {host: db1}ANDcreated_atnow()-INTERVAL1 dayORDERBYcreated_atDESC;-- 统计分析SELECTlog_level,count(*)AScount,jsonb_object_agg(context-host,count(*))AShost_distributionFROMapp_logsWHERElog_levelERRORGROUPBYlog_level;总结与展望JSONB是KES处理半结构化数据的利器。通过合理的存储设计和索引策略可以实现灵活的Schema演进和高效的查询性能。核心原则根据查询模式选择合适的数据类型为常用查询路径创建GIN索引避免过深的JSONB嵌套结构合理使用表达式索引提升查询性能定期分析查询性能优化索引策略KES的JSONB功能强大既保持了关系型数据库的查询能力又提供了文档数据库的灵活性。在实际应用中建议根据业务特点合理设计数据结构充分发挥JSONB的优势。期望本篇内容能够帮助你掌握KES数据类型和JSONB的高级应用为构建灵活高效的数据存储方案提供技术支撑。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从全连接到卷积:CNN核心原理与图像分类实战解析 2026/9/8 14:24:52

从全连接到卷积:CNN核心原理与图像分类实战解析

1. 从全连接到卷积:神经网络模型的核心思路 1.1 神经网络模型到底在做什么 这篇是系列笔记的第2篇,偏重把神经网络模型这件事说透。第1篇里我把机器学习的整体思路盘了一遍:数据进、特征出、模型学、预测用,本质上是一个从样本中…

阅读更多 →
俯视角2D射击游戏开发全解析:Godot 4实现移动、射击与碰撞 2026/9/8 14:24:52

俯视角2D射击游戏开发全解析:Godot 4实现移动、射击与碰撞

简介:一份基于C与SFML/Box2D的自上而下2D射击游戏源码项目,适合想了解2D游戏框架、物理引擎与光照渲染的开发者。项目除了实现基本射击玩法,还重点展示了视野雾、实时阴影、光源贴图等效果,并整合地图生成、玩家与敌人实体、碰撞检…

阅读更多 →
用Godot 4.x开发2D俯视角射击游戏:从移动、摄像机到碰撞全解析 2026/9/8 14:24:52

用Godot 4.x开发2D俯视角射击游戏:从移动、摄像机到碰撞全解析

简介:这是一套基于 C 实现的自上而下 2D 射击游戏完整源码工程,面向对游戏开发基础、物理碰撞与光照渲染感兴趣的初学者或进阶学习者。项目整合 SFML 与 Box2D 库,实现带视野机制的俯视角射击玩法,并包含地图生成、阴影、迷你地图…

阅读更多 →
银河麒麟V10内存不释放?用crontab实现定时巡检与自动清理 2026/9/8 14:24:52

银河麒麟V10内存不释放?用crontab实现定时巡检与自动清理

简介:面向银河麒麟V10这一国产服务器操作系统的运维场景,这份资源直击内存不释放(内存泄漏)问题,为系统管理员提供了一套轻量、可定时执行的自动化解决方案。压缩包共3个文件,包含2个Shell脚本和1个TXT配置…

阅读更多 →
基于vue-tianditu实现瓦片数据层添加 2026/9/8 14:24:52

基于vue-tianditu实现瓦片数据层添加

效果瓦片TileJson包下载pnpm add vue-tianditumain.ts import VueTianditu from "vue-tianditu";const app createApp(App);app.use(VueTianditu, {v: "4.0", //目前只支持4.0版本tk: "0b58ed11713850170e0d643e06be225e",});拿到瓦片Tilejson数…

阅读更多 →
FPGA状态机实战:从逻辑设计到UART接收完整实现 2026/9/8 14:21:52

FPGA状态机实战:从逻辑设计到UART接收完整实现

做FPGA开发,学到后面你会发现一个很残酷的事实:语法只是敲门砖,真正决定你能不能把一个功能做出来、做稳的,是逻辑设计能力。而逻辑设计能力最集中的体现,就是状态机。 我之前带过不少从0基础开始学FPGA的朋友&#x…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞