当前位置: 首页 > news >正文

数据仓库: 2- 数据建模

目录

    • 2- 数据建模
      • 2.1 维度建模
        • 2.1.1 维度建模的基本概念
          • 2.1.1.1 事实表 (Fact Table)
          • 2.1.1.2 维度表 (Dimension Table)
          • 2.1.1.3 维度 (Dimension)
          • 2.1.1.4 度量 (Measure)
        • 2.1.2 维度建模的主要模型
          • 2.1.2.1 星型模型 (Star Schema)
          • 2.1.2.2 雪花模型 (Snowflake Schema)
          • 2.1.2.3 星座模型 (Constellation Schema)
        • 2.1.3 维度设计技术
          • 2.1.3.1 缓慢变化维 (Slowly Changing Dimensions, SCD)
          • 2.1.3.2 退化维度 (Degenerate Dimension)
          • 2.1.3.3 巨型维度 (Junk Dimension)
          • 2.1.3.4 角色扮演维度 (Role-Playing Dimension)
          • 2.1.3.5 桥接表 (Bridge Table)
        • 2.1.4 维度建模的步骤
        • 2.1.5 维度建模的最佳实践
        • 2.1.6 维度建模的优势
        • 2.1.7 维度建模的挑战
      • 2.2 星型模型
        • 2.2.1 组成部分
        • 2.2.2 优点
        • 2.2.3 应用场景
        • 2.2.4 示例
        • 2.2.5 总结
      • 2.3 雪花模型
        • 2.3.1 定义
        • 2.3.2 结构组成
        • 2.3.3 雪花模型的特点
        • 2.3.4 设计步骤
        • 2.3.5 示例 以零售销售为例:
        • 2.3.6 优势
        • 2.3.7 局限性
        • 2.3.8 与星型模型的对比
        • 2.3.9 实施考虑
        • 2.3.10 使用场景
      • 2.4 事实表和维度表设计
        • 2.4.1 事实表设计
          • 2.4.1.1 确定业务过程和粒度
          • 2.4.1.2 确定度量值
          • 2.4.1.3 设计外键
          • 2.4.1.4 其它设计考虑
        • 2.4.2 维度表设计
          • 2.4.2.1 确定维度
          • 2.4.2.2 设计属性
          • 2.4.2.3 设计层次结构
          • 2.4.2.4 其他设计考虑
        • 2.4.3 总结
      • end

2- 数据建模

2.1 维度建模

2.1.1 维度建模的基本概念
2.1.1.1 事实表 (Fact Table)
  • 包含业务过程的度量值
  • 通常是数值型的、可累加的
  • 例如: 销售金额、数量等
2.1.1.2 维度表 (Dimension Table)
  • 包含描述业务实体的属性
  • 通常是文本类型的描述性信息
  • 例如: 产品、顾客、时间、地点等
2.1.1.3 维度 (Dimension)
  • 提供分析数据的角度
  • 用于过滤、分组和标记
2.1.1.4 度量 (Measure)
  • 事实表中的数值型数据
  • 可以进行数据运算(如: 求和、平均等)
2.1.2 维度建模的主要模型
2.1.2.1 星型模型 (Star Schema)
  • 中心是事实表, 周围是维度表
  • 维度表直接与事实表相连
  • 优点: 查询性能好, 易于理解
  • 缺点: 可能存在数据冗余
2.1.2.2 雪花模型 (Snowflake Schema)
  • 星型模型的变体, 维度表被进一步规范化
  • 减少了数据冗余, 增加了表的数量
  • 优点: 节省存储空间, 方便维护
  • 缺点: 查询性能可能下降, 结构复杂
2.1.2.3 星座模型 (Constellation Schema)
  • 多个实时表共享维表
  • 用于复杂的、多主体的数据仓库
2.1.3 维度设计技术
2.1.3.1 缓慢变化维 (Slowly Changing Dimensions, SCD)
  • 处理维度属性随时间变化的方法
  • 类型1: 直接覆盖旧值
  • 类型2: 增加新记录, 保留历史
  • 类型3: 增加新属性列, 保留当前和历史
  • 类型4: 增加历史表
  • 类型5: 结合1、2、3的混合方法
2.1.3.2 退化维度 (Degenerate Dimension)
  • 存储在事实表中的维度属性
  • 通常是业务过程产生的标识符
  • 例如: 订单号、发票号等
2.1.3.3 巨型维度 (Junk Dimension)
  • 将多个低基数的标志或属性组合成一个维度
  • 减少维度数量, 简化模型
2.1.3.4 角色扮演维度 (Role-Playing Dimension)
  • 同一个维度表在事实表中扮演多个角色
  • 例如: 日期维度可以是订单日期、发货日期等
2.1.3.5 桥接表 (Bridge Table)
  • 用于处理多对多关系
  • 链接事实表和维度表
2.1.4 维度建模的步骤
  1. 选择业务过程: 确定要建模的具体业务活动
  2. 声明粒度: 定义事实表中单条记录代表的最小细节级别
  3. 确定维度: 识别描述该业务过程的所有可能角度
  4. 确定事实: 确定与该业务过程相关的可度量指标
  5. 存储预计算结果: 在适当的情况下, 预先计算并存储聚合数据
2.1.5 维度建模的最佳实践
  1. 使用代理键: 为每个维度表使用独立的整数型代理键
  2. 创建一致性维度: 垮多个事实表使用相同的维度定义
  3. 创建日期维度: 包含丰富的日期相关属性, 便于时间分析
  4. 避免过度规范化: 在性能和易用性之间找平衡
  5. 考虑未来的扩展性: 设计时预留空间为将来可能的变化
2.1.6 维度建模的优势
  • 直观易懂, 便于业务用户理解
  • 查询性能优秀, 特别是对于复杂的分析查询
  • 灵活性高, 易于应对需求变化
  • 支持自助式BI和OLAP分析
2.1.7 维度建模的挑战
  • 可能存在数据冗余
  • 初次设计时可能难以确定最佳粒度
  • 处理快速变化的维度可能比较复杂
  • 需要权衡存储空间和查询性能

2.2 星型模型

星型模型是一种经典的数据仓库设计模式, 因其结构类似于星星而得名 ; 它由一个中心事实表和多个围绕它的维度表组成, 并通过外键关联 ;

这种简单而直观的结构使其易于理解、查询效率高, 被广泛应用于数据仓库和商业智能领域 ;

2.2.1 组成部分
  • 事实表 (Fact Table): 位于星型模型的中心, 存储关键业务指标的数值数据, 例如销售额、订单数量、网站访问量等 ; 每个事实表都与一个特定的业务过程相关联, 例如销售、订单、网站访问等 ;
    • 事实表通常包含大量数据行, 因为他们记录了每个业务事件的详细信息 ;
    • 事实表的结构相对简单, 通常包含一下两种类型的列:
      • 度量值 (Measures): 表示业务指标的数值数据, 例如销售额、数量、成本、例如等 ;
      • 外键 (Foreign Keys): 用于链接到维表, 表示与该事实相关的维度信息 ;
  • 维度表 (Dimension Table): 围绕在事实表周围, 提供关于事实的上下文, 例如时间、地点、产品、客户等 ; 维度表回答了关于事实的 “谁、什么、何时、何地、为什么” 等问题 ;
    • 维度表通常包含较少的数据行, 因为他们描述的是业务体的属性, 例如产品类别、地区、客户类型等 ;
    • 维度表的结构可以比较复杂, 可以包含多个层次结构, 例如时间维度可以包含年、季度、月、日等层次结构 ;
    • 维度表通常包含以下两种类型的列:
      • 主键 (Primary Key): 唯一标识维度表中的每一行数据 ;
      • 属性 (Attributes): 描述维度信息的文本或数值数据, 例如产品名称、类别、颜色、尺寸、地区名称、邮编、客户姓名、性别、年龄、地址等 ;
2.2.2 优点
  • 易于理解: 星型模型的结构简单直观, 及时是非技术人员也能轻松理解, 方便业务人员理解数据结构和进行数据分析 ;
  • 查询性能高: 星型模型采用去规范化的设计, 将数据冗余存储在维度表中, 避免复杂的多表连接, 因此查询效率非常高 ;
  • 易于扩展: 可以很容易地添加新的维度表或事实表, 以适应不断变化的业务需求, 例如增加新的产品线、开拓新的市场等 ;
2.2.3 应用场景

星型模型适用于一下场景:

  • 数据分析和报表: 星型模型非常适合用于构建报表和仪表板, 因为它可以快速地对数据进行切片、切块、钻取等操作 ;
  • 商业智能(BI): 星型模型是许多BI工具的基础, 因为它可以提供对数据的快速访问和分析 ;
  • 数据挖掘: 星型模型可以用于构建数据挖掘模型, 因为它可以提供结构化的数据, 方便算法进行训练和预测 ;
2.2.4 示例

以一个电商网站的销售数据为例, 我们可以设计一下的星型模型:

  • 事实表: 销售事实表 (FactSales)
    • 销售额 (SalesAmount)
    • 成本 (Cost)
    • 利润 (Profit)
    • 订单 ID (外键) (OrderID)
    • 产品ID (外键) (ProductID)
    • 时间ID (外键) (TimeID)
    • 客户ID (外键) (CustomerID)
  • 维度表:
    • 订单维度表 (DimOrders): 订单ID (OrderID), 订单日期 (OrderDate), 订单状态 (OrderStatus)等
    • 产品维度表 (DimProducts): 产品ID (ProductID), 产品名称 (ProductName), 产品类别 (ProductCategory), 产品价格 (Price) 等
    • 时间维度表 (DimTime): 时间ID(TimeID), 日期 (Date), 星期 (Week), 月份 (Month), 季度 (Quarter), 年份 (Year) 等
    • 客户维度表 (DimCustomers): 客户ID (CustomerID), 客户姓名 (CustomerName), 客户性别 (Gender), 年龄 (Age), 客户地区 (Region) 等

通过将这些表连接起来, 我们可以轻松地查询各种销售数据, 例如:

  • 2024 年第一季度华东地区各个产品类别的销售额
  • 2024 年 3 月份女性客户购买的各个产品的销售数量
  • 不同年龄段客户的平均订单金额
2.2.5 总结

星型模型是一种简单、高效的数据仓库设计模型, 使用与各种数据分析和商业智能应用 ; 其易于理解、查询性能高和易于扩展的特性使其成为构建数据仓库的首选方案之一 ;

2.3 雪花模型

雪花模型是星型模型的一种扩展, 它进一步将维度表规范化, 将具有层次关系的维度属性分离到不同的表中, 形成类似雪花的分支结构 ;

2.3.1 定义

雪花模型是一种数据库设计模型, 其中维度表被进一步规范化, 形成多层结构, 看起来像雪花的形状 ;

2.3.2 结构组成
  • 事实表
    • 位于模型的中心
    • 包含业务度量和指向主要维度表的外键
  • 主要维度表
    • 直接与事实表相连
    • 包含部分描述性属性和指向次级维度表的外键
  • 次级维度表
    • 与主要维度表相连
    • 进一步细分维度属性
2.3.3 雪花模型的特点
  • 高度规范化: 维度表被分解成多个相关的表
  • 减少数据冗余: 通过规范化降低了数据重复
  • 层次结构清晰: 明确展示了维度之间的层次关系
  • 灵活性: 可以详细描述复杂的维度关系
2.3.4 设计步骤
  • 创建星型模型: 先设计基本的星型结构
  • 识别维度层次: 确定维度内的层次关系
  • 规范化维度: 将维度表拆分成多个相关表
  • 建立关系: 在拆分后的维度表之间建立关系
2.3.5 示例 以零售销售为例:
  • 事实表: 销售事实
    • 包含: 日期ID、产品ID、商品ID、销售额、销售数量
  • 主要维度表:
    • 产品维度: 产品ID、产品名称、类别ID、品牌ID
    • 商店维度: 商店ID、商店名称、城市ID
  • 次级维度表:
    • 产品类别: 类别ID、类别名称
    • 品牌: 品牌ID、品牌名称
    • 城市: 城市ID、城市名称、州ID
    • 州: 州ID、州名称、国家ID
    • 国家: 国家ID、国家名称
2.3.6 优势
  • 数据一致性: 减少数据冗余, 提高了一致性
  • 节省存储空间: 规范化结构减少了数据重复
  • 维护方便: 更新某些属性时只需要再一个地方修改
  • 支持复杂的维度层次: 可以表示更复杂的维度关系
2.3.7 局限性
  • 查询性能可能下降: 需要更多的表连接操作
  • 复杂度增加: 模型结构比星型模型更复杂
  • 不太直观: 对非技术用户来说可能较难理解
2.3.8 与星型模型的对比
  • 雪花模型: 更规范化, 节省空间, 但查询可能较慢
  • 星型模型: 非规范化, 查询性能好, 结构简单
2.3.9 实施考虑
  • 性能优化: 可能需要更复杂的索引策略
  • 视图: 考虑使用物化视图来提高查询性能
  • ETL复杂性: 数据加载和转换过程可能更复杂
2.3.10 使用场景
  • 大型数据仓库: 当数据量巨大, 需要严格控制冗余时
  • 复杂的维度层次: 当维度有多层次结构需要表示时
  • 频繁更新的维度属性: 当某些维度属性经常变化时

2.4 事实表和维度表设计

在数据仓库设计中, 事实表和维度表是两个最基本的概念, 采用维度模型设计 ; 事实表存储时间度量值, 维度表描述业务实体 ; 两者协同工作, 为分析和报表提供完整的数据视图 ;

2.4.1 事实表设计
2.4.1.1 确定业务过程和粒度

首先需要明确要分析的业务过程是什么, 例如: 销售、订单、网站访问等 ;

然后确定事实表的粒度, 即每行数据代表什么级别的业务事件 ;

  • 粒度越细, 数据越详细, 但也意味着数据量越大, 查询销量越低 ;
  • 粒度越粗, 数据越汇总, 数据量越小, 但可能会丢失一些细节信息 ;

选择合适的粒度需要权衡数据量、查询性能和业务需求 ;

2.4.1.2 确定度量值

度量值是事实表中最重要的部分, 它们是可以计量的数值指标, 用于描述业务过程的关键特征; 常见的度量值包括:

  • 数量: 例如销售数量、订单数量、访问次数等 ;
  • 金额: 例如销售额、成本、利润等 ;
  • 时间: 例如订单处理时间、页面加载时间等 ;
  • 比率: 例如转化率、点击率、满意度等 ;

选择度量值时需要考虑业务需求和数据可获得性 ;

2.4.1.3 设计外键

事实表通过外键与维度表关联, 每个外键都对应一个维度表的主键, 表示该事实发生在哪个维度下 ;

  • 外键数量: 取决于事实表需要关联的维度数量 ;
  • 外键类型: 通常使用整数类型, 以提高查询效率 ;
2.4.1.4 其它设计考虑
  • 添加时间戳: 记录每行数据的创建时间和更新时间, 方便数据跟踪和审计 ;
  • 预留扩展字段: 为未来可能增加的度量值预留空间, 提高数据模型的可扩展性 ;
2.4.2 维度表设计
2.4.2.1 确定维度

维度是描述业务实体的属性, 例如时间、地点、产品、客户等; 每个维度对应一个维度表, 用于存储该维度的所有可能取值 ;

2.4.2.2 设计属性

维度表的属性用于描述维度的特征, 例如:

  • 时间维度: 年、月、日、小时、分钟、秒等
  • 地点维度: 国家、省份、城市、地区等
  • 产品维度: 产品类型、名称、品牌、型号、规格等
  • 客户维度: 客户姓名、性别、年龄、地址、联系方式等

选择属性时需要考虑业务需求和数据可获得性 ;

2.4.2.3 设计层次结构

一些维度可以按照层次结构组织, 例如:

  • 时间维度: 年 > 季度 > 月 > 日 > 小时 > 分钟 > 秒
  • 地点维度: 国家 > 省份 > 城市 > 区县

层次结构可以方便进行多层次的钻取分析, 例如从年度销售额下钻到月度销售额, 再下钻到每日销售额 ;

2.4.2.4 其他设计考虑
  • 使用代理键: 使用自增整数作为维度表的主键, 而不是使用业务主键, 可以提高查询效率 ;
  • 添加描述性字段: 为每个属性添加简短的描述信息, 提高数据可读性 ;
  • 处理缓慢变化维度: 对于随时间缓慢变化的维度, 例如客户地址, 需要采用合适的策略来处理历史数据 ;
2.4.3 总结

事实表和维度表的设计是数据仓库建设的基础, 需要根据具体的业务需求和数据特点进行设计 ;

一个良好的数据模型可以提高数据查询效率, 方便进行多维分析, 并支持业务决策 ;

end

相关文章:

数据仓库: 2- 数据建模

目录 2- 数据建模2.1 维度建模2.1.1 维度建模的基本概念2.1.1.1 事实表 (Fact Table)2.1.1.2 维度表 (Dimension Table)2.1.1.3 维度 (Dimension)2.1.1.4 度量 (Measure) 2.1.2 维度建模的主要模型2.1.2.1 星型模型 (Star Schema)2.1.2.2 雪花模型 (Snowflake Schema)2.1.2.3 星…...

Tomcat 漏洞

一.CVE-2017-12615 1.使用burp抓包 把get改成put jsp文件后加/ 添加完成后访问 木马 然后木马的网址 在哥斯拉测试并且添加 添加成功 然后我们就成功进去啦、 二.弱口令 点击后输入默认用户名、密码:tomcat/tomcat 登陆之后上传一个jsp文件 后缀改成war 然后访问我…...

分布式消息队列Kafka

分布式消息队列Kafka 简介: Kafka 是一个分布式消息队列系统,用于处理实时数据流。消息按照主题(Topic)进行分类存储,发送消息的实体称为 Producer,接收消息的实体称为 Consumer。Kafka 集群由多个 Kafka 实…...

C# Unity 面向对象补全计划 七大原则 之 迪米特法则(Law Of Demeter )难度:☆☆☆ 总结:直取蜀汉

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.迪米特法则(…...

【C++】—— 类与对象(四)

【C】—— 类与对象&#xff08;四&#xff09; 6、赋值运算符重载6.1、运算符重载6.1.1、基础知识6.1.2、调用方法6.1.3、前置 与 后置 的重载6.1.4、注意事项6.1.5、<< 和 >> 运算符重载6.1.5.1、<< 和 >> 基础6.1.5.2、日期类 operator<< 的实…...

Qt无边框窗口,关闭后再show,鼠标等事件不响应问题解决办法

问题描述 使用Qt做了一个无边框界面&#xff0c;关闭后再打开&#xff0c;子控件的点击以及hover效果不可用。 setWindowFlags(windowFlags() | Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏解决方案&#xff1a; 在网上发现可以通过重写showEvent(QShowEvent* showE…...

StringJoiner更优雅创建含分隔符的字符序列

文章目录 1 why2 what3 how4 练习手段 1 why StringBuilder拼接包含分隔符的字符序列时&#xff0c;分隔符需要一个一个添加&#xff0c;或者需要手动删除末尾冗余的分隔符&#xff0c;代码不美观&#xff0c;不好看。 比如&#xff0c;单个字符串依次拼接时&#xff1a; Stri…...

线程池原理(一)线程池核心概述

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 线程回顾 创建线程的方式 继承 Thread 类实现 Runnable 接口 创建后的线程有如下状态&#xff1a; NEW&#xff1a;新建的线程&#xff0c;无任何操作 public static void main(String[] args) {Thread…...

关于redisson的序列化配置

由于使用redisson来存储list&#xff0c;返回的数据格式总是不对 原因是配置的序列化格式不对 Bean(value "redissonDtClient") public RedissonClient redissonClient() {RedisConnectionProperties.RedisConfigEntity configEntity properties.getDt();log.inf…...

CentOS安装ax200驱动

如果内核低于5.1需要安装一下内核 详细移步&#xff1a;Centos7安装高版本内核 大致如下&#xff1a; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm yum --enablerepoelrepo-ke…...

FFMPEG Mac版本编译

Mac下FFMPEG使用 There are a few ways to get FFmpeg on OS X. One is to build it yourself. Compiling on Mac OS X is as easy as any other *nix machine, there are just a few caveats(警告). The general procedure is get the source, then ./configure <flags&g…...

Reactive Programing与“响应式”

将Reactive Programing翻译为“响应式编程”&#xff0c;的确不好理解。什么是Reactive&#xff1f;Reactive被翻译为“反应”&#xff0c;其英文原意是“事物对变化信号的回应、反应”。我热了&#xff0c;空调自动开&#xff0c;这就是空调对我的Reaction&#xff0c;我和空调…...

Pinterest:从 Druid 到 StarRocks,实现 6 倍成本效益比提升

导读&#xff1a; 开源无国界&#xff0c;StarRocks 自开源以来&#xff0c;近3年的时间里已在全球数据技术领域崭露头角。我们欣喜地发现&#xff0c;越来越多的海外用户正在使用并积极推广着 StarRocks。为了促进知识共享&#xff0c;StarRocks中文社区将精选优秀文章与大家共…...

代码+视频,R语言VRPM绘制多种模型的彩色列线图

列线图&#xff0c;又称诺莫图&#xff08;Nomogram&#xff09;&#xff0c;它是建立在回归分析的基础上&#xff0c;使用多个临床指标或者生物属性&#xff0c;然后采用带有分数高低的线段&#xff0c;从而达到设置的目的&#xff1a;基于多个变量的值预测一定的临床结局或者…...

Python 设计模式之工厂函数模式

文章目录 案例基本案例逐渐复杂的案例 问题回顾什么是工厂模式&#xff1f;为什么会用到工厂函数模式&#xff1f;工厂函数模式和抽象工厂模式有什么关系&#xff1f; 工厂函数模式是一种创建型设计模式&#xff0c;抛出问题&#xff1a; 什么是工厂函数模式&#xff1f;为什么…...

数据赋能(171)——开发:数据挖掘——概述、关注焦点

概述 数据挖掘是从大量的数据中&#xff0c;提取隐藏在其中的、事先不知道的、但潜在有用的信息的过程。 数据挖掘是数据分析过程中的一个核心环节。 数据挖掘的主要目的是从大量数据中自动发现隐藏的模式、关联和趋势&#xff0c;以揭示数据的潜在价值。数据挖掘技术可以帮…...

L1 - OpenCompass 评测 InternLM-1.8B 实践

基础任务&#xff08;完成此任务即完成闯关&#xff09; 使用 OpenCompass 评测 internlm2-chat-1.8b 模型在 ceval 数据集上的性能&#xff0c;记录复现过程并截图。 按照教程中的顺序安装包有问题&#xff0c;网上找了解决方案&#xff0c;按一下顺序能正常执行 使用OpenCo…...

JS【详解】数据类型检测(含获取任意数据的数据类型的函数封装、typeof、检测是否为 null、检测是否为数组、检测是否为非数组/函数的对象)

【函数封装】获取任意数据的数据类型 /*** 获取任意数据的数据类型** param x 变量* returns 返回变量的类型名称&#xff08;小写字母&#xff09;*/ function getType(x) {// 获取目标数据的私有属性 [[Class]] 的值const originType Object.prototype.toString.call(x); //…...

OpenCV图像滤波(10)Laplacian函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 计算图像的拉普拉斯值。 该函数通过使用 Sobel 运算符计算出的 x 和 y 的二阶导数之和来计算源图像的拉普拉斯值&#xff1a; dst Δ src ∂…...

docker系列11:Dockerfile入门

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx docker系列6&#xff1a;docker安装redis docker系…...

LVS(Linux virual server)详解

目录 一、LVS&#xff08;Linux virual server&#xff09;是什么&#xff1f; 二、集群和分布式简介 2.1、集群Cluster 2.2、分布式 2.3、集群和分布式 三、LVS运行原理 3.1、LVS基本概念 3.2、LVS集群的类型 3.2.1 nat模式 3.2.2 DR模式 3.2.3、LVS工作模式总结 …...

Session共享方法

在Web开发中&#xff0c;会话&#xff08;Session&#xff09;管理是跟踪用户与服务器之间交互的一种常见方法。Session 共享通常指的是在一个应用集群或多个应用服务之间保持用户的会话状态一致。这在负载均衡、微服务架构或者分布式系统中尤为重要 一、基于SQL的session管理…...

Ubuntu 22.04 Docker安装笔记

1、准备一台虚机 可以根据《VMware Workstation安装Ubuntu 22.04笔记》来准备虚拟机。完成后&#xff0c;根据需求安装必要的软件&#xff0c;并设置root权限进行登录。 sudo apt update sudo apt install iputils-ping -y sudo apt install vim -y允许root ssh登录&#xff1…...

编程-设计模式 6:适配器模式

设计模式 6&#xff1a;适配器模式 定义与目的 定义&#xff1a;适配器模式将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。目的&#xff1a;该模式的主要目的是解决接口不匹配的问题&#xff0c;使得一个…...

ERC721 概念解释

目录 FeaturesVotesAccess ControlUpgradeabilityFeatures Mintable: 允许创建新的代币(minting)。合约的所有者或有权限的账户可以调用 mint 函数来生成新的代币,并将其分配给指定的地址。 Auto Increment Ids:自动递增 ID。每次创建新的代币时,代币的 ID 会自动递增,确保…...

数据结构(其五)--串

目录 12.串 12.1 基本操作 12.2 串的存储结构 12.3 字符串的模式匹配算法 (1).朴素模式匹配算法 (2).KMP算法 i.next[]数组的求解 ii.next[]数组的优化——nextval数组 iii.手算nextval数组 iiii.机算nextval数组 + KMP函数 12.串 串,即字符串(string),由零个或多…...

LeetCode Hot100 LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -…...

GESP C++ 2024年06月一级真题卷

一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 在 C 中&#xff0c;下列不可做变量的是 ( ) 。 A. five-Star B. five_star C. fiveStar D. _fiveStar 答案&#xff1a;A 解析&#xff1a;标识符命名规则&#xff0c;标识符由字母、数…...

在 Ubuntu Server 上配置静态 IP 地址

在 Ubuntu Server 上配置静态 IP 地址 测试时使用的Ubuntu server版本是22.04 一、Ubuntu 17.10之前版本 使用 ifupdown 配置文件来设置静态 IP。配置文件通常位于 /etc/network/interfaces。 1.1 编辑 /etc/network/interfaces 文件&#xff1a; sudo vim /etc/network/in…...

数据结构——栈的讲解(超详细)

前言&#xff1a; 小编已经在前面讲完了链表和顺序表的内容&#xff0c;下面我们继续乘胜追击&#xff0c;开始另一个数据结构&#xff1a;栈的详解&#xff0c;下面跟上小编的脚步&#xff0c;开启今天的学习之路&#xff01; 目录 1.栈的概念和结构 1.1.栈的概念 1.2.栈的结构…...