【HBase入门与实战】一文搞懂HBase!

HBase入门与实战

在这里插入图片描述
在这里插入图片描述

目录

  • HBase入门与实战
    • 内容要点
    • 一、引入HBase
    • 二、了解NoSQL的概念
    • 三、NoSQL、BI、大数据的关系
    • 四、HBase概述
    • 五、HBase应用场景

内容要点

  • HBase的引入、定义和特点
  • NoSQL数据库的概念和与关系型数据库的区别
  • HBase的物理架构和逻辑架构
  • HBase Shell的基本命令使用
  • HBase的应用场景

一、引入HBase

常见的NoSQL数据库:包括Redis和HBase,这些数据库在处理大规模数据集时,相比传统的关系型数据库,提供了更高的灵活性和扩展性。

微服务和高并发:随着传统开发逐渐转向微服务架构,面向"老百姓"的应用需要处理的并发量急剧增加。在这种高并发环境下,传统关系型数据库在增删改查操作上的速度往往跟不上项目的需求。

传统开发解决高并发的策略:
在这里插入图片描述

  • ① 将数据库中的数据定期存储到Redis中,后端查询操作直接面向Redis来执行。
  • ② 构建数据库的Redis的集群化。

引入HBase的原因:当Redis的存储能力不足或主从结构过于复杂导致效率下降,Hbase成为一个优秀的选择。HBase以其【快速的读写速度】和【高吞吐量】,能够有效且快速地处理大数据的增删改查操作。

HBase特点:

  • ① 高吞吐量的读写操作

    • 为什么HBase有快速的读写速度(高吞吐量)?

    • 写操作:

      • 内存写入:所有的写操作首先被写入到MemStore中,这一操作是在内存中完成的,高效。并且对于HBase而言,只要数据写入MemStore存储区就标志着写操作已经完成,无需等待落盘。
      • 数据备份:在数据刷新到磁盘之前,所有的写操作都会被记录在Hlog,即使故障,也能够恢复数据。
      • 并行写操作:HBase的每个列族对应一个MemStore,能够对不同列族的数据进行并行处理。
        在这里插入图片描述
    • 如何理解"无需暂停写入操作以等待数据落盘"的设计理念?

      • MemStore提供了一种暂存数据的方式,直至数据被刷新到磁盘上的StoreFile中。
      • 通过WAL机制保证MemStore在数据未落盘时发生故障也不会导致数据丢失。
      • 保障数据一定能够落盘(即使数据丢失也可以通过HLog恢复数据),此时可以认为操作已经完成。
      • 因此写入的数据得到保障后,允许系统在高吞吐量的情况下继续接受和处理新的写请求。
    • 读操作:

      • 读操作可以直接从内存中的MemStore或者是缓存中的BlockCache获取数据
      • 使用Bloom Filter检查所需的数据是否不在StoreFile中,如果数据不在那里,能够及时终止读操作,避免了不必要的磁盘访问。
      • (为什么Bloom Filter能够实现快速检查的功能?BloomFilter的算法原理。)
  • ② HBase天生支持集群部署,无需进行复杂的分表或者分库操作。简化了大规模数据处理的复杂性。

  • ③ HBase是列式存储

    • 列式存储和行式存储的理解
      1. 定义
        • 列式存储是指每一列的数据存储在一起。
        • 行式存储是指每一行的数据存储在一起。
      2. 列式存储的优势
        • 高效的数据存储:当查询特定列的数据(字段)时,数据库可以直接访问这部分连续存储的数据。(相当于索引)
        • 对于复杂的分析查询通常只关注数据集中的特定几列,列式存储能够只读取必要的列。
        • 压缩与优化:同类型的数据便于压缩与优化。
        • 减少冗余:如果存在某部分列数据缺失,则可以在列存储时不存储该部分的值。
          HBase 列族:列族是列的逻辑分组,同个列族的所有列存储在一起。

二、了解NoSQL的概念

NoSQL(Not Only SQL):非关系型数据库

NoSQL 与 RDBMS 的区别:
在这里插入图片描述

  • 数据模型
    • 非关系型 VS 关系型
  • 查询语言
    • 不使用SQL,有独特指令。
  • 可【伸缩性】和【可用性】问题
    • 伸缩性
      • 数据分裂【伸】和 分布式架构
      • 文件合并【缩】
        • 数据分裂
          • 数据分裂是HBase中自动管理数据存储容量的一种机制。
          • 当表初始创建时,可能只有一个Region。随着数据量的不断增加,一个HBase表的数据量可能会增长到超出单个Region的承载能力。
          • 为了有效管理这种情况,HBase通过数据分裂自动地将表分割为N部分,每个Region包含一部分的数据。
        • Region:
          • HBase的基本存储单元,由一系列行组成,内部的数据是按照行键(row key)排序的。
        • 自动分裂:
          • Region大小达到的分裂阈值、RegionServer的数量都可以进行配置。(RegionServer的数量可以进行手动添加)
          • 得到的新Region可以被分配到新的RegionServer上(保证负载均衡)
          • 分裂的缺陷:分裂阶段处于阻塞状态,往里面写数据可能会导致数据丢失。
          • 【优化:可以通过预分裂的方式确定数据规模大概需要分为多少个Region,并在相应的HRegionServer中提前建好Region,就无需做分裂了。能够大大提高写的效率】
          • 分裂的过程是由HMaster主导,告诉该台HRegionServer应该迁移到哪一台不同的服务器上面。并且会在HMaster中存储元数据信息的表中记录某张HBase表的数据分别存储在哪几台RegionServer中的哪几个Region?
        • 文件合并:
          • min_compact:
            • 合并较小的、最近生成的HFiles
            • 不会丢弃任何删除标记的数据(即使数据被标记为删除,物理上仍然存在于合并过后的文件中)
          • major_compact:
            • 合并一个表中的所有HFiles
            • 会彻底删除标记为删除的数据
            • 通常是手动触发
          • compact后的数据【实际存储】在HDFS上,小的HFile应该远小于128M
    • 分布式架构
      • HBase表:抽象概念,物理存储上被细分为多个Region。
      • Region:数据存储和访问的基本单元。
      • RegionServer:运行在集群中的服务器,负责管理和服务其上存储的一个或多个Region。
      • HBase采用的是典型的Master/Slave架构。HBase Master负责管理表和Region的元数据信息,以及RegionServer的负载均衡。而RegionServers负责处理客户端的读写请求,并管理存储在其上的Regions。
    • 可用性
      • ZooKeeper实现了Client和HMaster之间的协调管理
      • HLog(WAL:Write Ahead Log 当数据写入具体的磁盘之前,先将其写一份在日志文件上)
        • HLog能够将死去的RegionServer"复活",获取其原来的表数据。
        • 当HRegionServer死的时候,则将HLog的数据迁移到另一台服务器上。
        • 而数据迁移又依靠HMaster,因此HMaster也需要容灾机制,则出现了HMaster Backup和ZooKeeper进行协调管理。
        • 如果ZooKeeper和HMaster之间心跳"断"了,则启用HMaster Backup.
  • 事务性
    • NoSQL 更加注重 性能、扩展性、灵活性,不像RDBMS一样强调原子性或一致性。

    • 一致性问题
      在这里插入图片描述

      • 发生场景:通常发生在实时数仓。
      • 批处理:规定记录数达到一定值才发送,可能导致时效性差(前后两条记录的时间间隔长)。
      • 流处理:采用每隔一段时间(水位线)就进行数据发送的策略。面临的挑战是如何确保在时间范围内的数据都被纳入处理。
        • 解决方案:允许一定的延迟(例如,计算3秒内的数据,但结果会在5秒内出来),这是为了等待那些符合时间范围但尚未被处理的数据。
      • 流批一体:流处理和批处理结合的处理模式(Flink)
      • 侧输出流:
        • 为了保证最终一致性,对因延迟未能纳入批次的数据放入侧输出流中。
        • 例如:如果在一个设定的时间窗口(如秒级窗口)内,某些数据未能被处理,这些数据就可以被放入侧输出流中。随后,可以在一个更长的时间窗口(如分钟窗口)内对这些数据进行处理。
      • 实时数仓 VS 离线数仓
        • 数据准确性:离线数仓高于实时数仓
        • 时间范围:
          • 实时数仓的时间范围:秒、分、时、天
          • 离线数仓的时间范围:天、周、月、年
        • 数据校准:
          • 可以使用离线数仓的数据去校准实施数仓中同维度的数据(如天),以检测实时数仓的实时性。
          • 这种校准通常使用大量模拟数据进行。

三、NoSQL、BI、大数据的关系

  • BI:商务智能
    • 它是一套完整的解决方案
    • BI应用设计模型,模型依赖于模式
    • BI主要支持标准SQL(RDB)
    • 难在业务掌握和熟悉的能力
  • NoSQL和大数据相关性较高,但是NoSQL!=大数据
    • NoSQL主要帮助大数据解决数据存储问题

四、HBase概述

  1. 定义

    • 是一个面向列存储的NoSQL数据库
    • 是一个分布式HashMap,底层数据是Key-Value格式
    • 使用HDFS作为存储并利用其可靠性

    什么是【分布式HashMap】?
    HashMap的本质是用一个简单的值形式映射一个复杂的值形式。
    HBase通过一个RowKey提取该RowKey下多个列族下多个列的多个值。
    在这里插入图片描述

  2. 特点

    • 数据访问速度快,响应时间约2~20ms。
    • 实时数仓和离线数仓都会用到HBase:
      • 实时数仓
        • 响应速度快
      • 离线数仓
        • 宽表列存储
    • 支持随机读写,每个节点20k~100k+ ops/s
      • 哈希表也可以随机读写
    • 可扩展性
      • 对Hadoop,1个NameNode只能带1024(实际1009)台DataNode
      • 但是HBase可以扩展到20000+节点
    • 高并发
  3. HBase的物理架构
    在这里插入图片描述
    在这里插入图片描述

这张图描述了HBase的物理架构,主要包括以下几个部分:

  • Client: 客户端,用于与Zookeeper和HMaster进行交互。
  • Zookeeper: 用于维护HBase集群的状态和元数据信息。(协调 管理)
  • HMaster: HBase集群的主控制节点,负责监控集群状态和管理区域服务器(RegionServer)。
  • HRegionServer: 区域服务器,负责存储和管理HBase数据。每个RegionServer管理着多个HRegion。
  • HRegion: 表的水平分区,一个Region包含一个或多个MemStore和多个StoreFile。
  • MemStore: 内存存储区,用于缓存新写入的数据。
  • StoreFile: 持久化存储文件,用于存储从MemStore刷新的数据。
  • HFile: StoreFile中的底层物理文件,实际存储数据。
  • DFS Client: 与底层HDFS集群交互的客户端。
  • HDFS: 底层的分布式文件系统,用于持久化存储HBase数据。

箭头表示各组件之间的交互和数据流向:

  • Client与Zookeeper和HMaster交互,用于读写数据。
  • HMaster管理和监控RegionServer。
  • RegionServer管理MemStore和StoreFile,用于读写数据。
  • MemStore中的数据定期刷新到StoreFile。
  • StoreFile的数据持久化存储在HDFS上

各组件的作用

  • HMaster

    • 是HBase集群的主节点,可以配置多个,用来实现HA
      • 一般backup-masters并不配置主机器(master01)
    • 处理元数据的变更
      • HBase元数据:
        • 命名空间名字、表名字、列族的名字、列族内部的schema…
    • 监控RegionServer
    • 负责RegionServer的负载均衡(分裂时告知将新增数据迁移到哪台RegionServer)
    • 处理RegionServer故障转移
    • 通过ZooKeeper发布自己的位置到客户端
  • RegionServer

    • 负责管理维护Region,负责存储HBase实际数据

      • 一个RegionServer包含一个Hlog,一个BlockCache,多个Region(可以是一张表,也可以是不同的表)
      • HFile和HLog作为序列化文件保存在HDFS上
      • Client直接与RegionServer进行交互
    • 功能

      • 负责管理HBase的实际数据
      • 处理分配给它的Region
      • 刷新缓存到HDFS
      • 维护HLog
      • 执行Compaction
      • 负责处理Region分片
    • 读写缓存

      • 读缓存:BlockCache
        • 将最近或频繁访问的数据块(blocks)缓存到内存中,HBase可以快速响应读请求。
      • 写缓存:MemStore
        • 暂存写入数据,直至达到一定的阈值,然后批量写入磁盘,形成新的StoreFile(HFile)
  • Bloom Filter

    • 快速确定数据是否不在StoreFile中,如果不在,读操作即刻终止。
      在这里插入图片描述

    • 工作原理:

    1. 初始化:创建一个m位的位数组(bit array),初始时将所有位都设为0
    2. 添加元素:当一个元素(如URL1、URL2、URL3)被加入集合时,通过k个哈希函数生成k个位置索引,并将这些位设置为1。
    3. 查询元素:要检查一个元素是否存在于集合中,再次通过相同的k个哈希函数生成k个位置索引。
      如果所有这些位置的位都是1,那么该元素可能在集合中(存在误判可能)。如果任何一个位置的位时0,则该元素绝对不在集合中。
    • 为什么要使用多个哈希函数?
      • 降低误判率,避免哈希冲突。
  • Region和Table

    • 单个Table被分区成大小大致相同的Region
    • 一个Region只能分配给一个RegionServer
      在这里插入图片描述
  1. HBase逻辑架构

    • Row

      • Rowkey(行键)是唯一的并已排序
      • Schema可以定义何时插入数据、要保留多少历史版本、分区策略如何、列族叫什么名字
      • 每个Row都可以定义自己的列,即使其他Row不使用
        • 相关列定义为列族
      • 使用唯一时间戳维护多个Row版本
        • 在不同版本中值类型可以不同(但不建议)
      • HBase数据全部以字节存储
    • RowKey的设计

      1. 越短越好,不超过16个字节
      2. 在前缀加随机数使数据均匀地分布到不同的RegionServer。
      3. 保证RowKey的唯一
    • 热点问题

      • HBase中的行是按照RowKey的字典顺序排序的,但可能会导致大量的client直接访问集群的一个或极少数个节点
      • 大量的访问会使热点Region所在的单个机器超出自身承受能力,引起性能下降甚至Region不可用。
    • 常见的设计RowKey的手段("_"的意义是让其分布均匀又不破坏实际意义)

      1. 加盐
        给RowKey加上随机前缀
        “456165181_henry@hotmail.com”

      2. 哈希
        给RowKey加上哈希前缀
        “hashcode(“henry”)_henry@hotmail.com”

  2. HBase的读流程

    • 读取:如果Bloom Filter检查通过,或者没有Bloom Filter参与,HBase会从相应的StoreFile读取数据。
    • 合并:从不同的StoreFile和MemStore中读取的数据需要被合并,以获得最终的结果,因为一个键的多个版本可能分布在不同的文件和MemStore中。
    • Scanner Cache:合并后的数据可以被Scanner Cache暂存,以便快速响应相同的后续读请求。
    • 客户端:最后,合并后的数据被发送到客户端。
      在这里插入图片描述
  3. HBase元数据管理

    • 数据管理目录
      • 系统目录表 hbase:meta(命名空间和表、字段和列族之间都是用":"分开的)
        • 存储元数据
      • ZooKeeper存储hbase:meta表的位置信息
    • HBase实际数据存储在HDFS上
  4. HBase Shell

hbase shell 进入HBase编译器
version     查看版本信息
status      create_namespace "NAMESPACE"                    创建命名空间
drop_namespace "NAMESPACE"                      删除命名空间(需要先将命名空间下的表删除后才能删除命名空间)
list_namespace                                  查找已创建的命名空间列表  
list                                            查看所有表
list_namespace_tables "NAMESPACE"               查看指定命名空间下的表
create "hbase_test:student_info",{NAME = 'base',BLOOMFILTER => 'ROW',IN_MEMORY = 'false',VERSIONS =>'1',KEEP_DELETED_CELLS => 'FALSE',DATA_BLOCK_ENCODING => 'NONE',COMPRESSION = 'NONE',TTL => 'FOREVER',MIN_VERSIONS => '0',BLOCKCACHE =>'true',BLOCKSIZE => '65536',REPLICATION_SCOPE => '0'}NAME: 列族的名称,在这个例子中是base。列族是HBase表中的一个逻辑分组,用于存储相关性较高的数据。BLOOMFILTER: 用于提高读取性能的过滤器类型。ROW表示行级别的布隆过滤器,主要用于判断某行数据是否存在于磁盘上,以减少磁盘I/O操作。IN_MEMORY: 如果设置为true,则HBase会尽量将这个列族的数据存储在内存中,以提高读取速度。在这个例子中,它被设置为false。VERSIONS: 指定一个单元(cell)内保留的版本数。在这个例子中,每个单元只保留一个版本。KEEP_DELETED_CELLS: 控制删除的单元是否被保留。FALSE表示一旦单元被删除,就不再保留。DATA_BLOCK_ENCODING: 数据块编码类型。NONE表示不使用编码。数据块编码可以提高读取性能和压缩效率。COMPRESSION: 数据压缩类型。NONE表示不使用压缩。其他选项如SNAPPY、GZ等可以减少存储空间需求,提高I/O性能。TTL: 数据的存活时间(Time To Live)。FOREVER表示数据不会因为时间过期而被自动删除。MIN_VERSIONS: 数据的最小版本数。即使超过了TTL时间,至少也会保留这么多版本的数据。在这个例子中,它被设置为0。BLOCKCACHE: 是否启用HBase的块缓存。true表示启用,可以提高读取性能,因为数据可以从内存中直接获取,而不是每次都从磁盘读取。BLOCKSIZE: 数据块的大小,单位是字节。在这个例子中,设置为65536字节(即64KB)。较小的数据块可以提高随机读取性能,而较大的数据块可以提高顺序读取性能。 REPLICATION_SCOPE: 数据的复制范围。0表示不复制,用于跨集群复制场景。其他值允许表之间的数据复制,主要用于灾备。
desc "[NAMESPACE:]TABLE"                        查看表定义
is_enabled "[NAMESPACE:]TABLE"                  判定该表是否处于启动状态
is_disabled "[NAMESPACE:]TABLE"                 判定该表是否处于禁用状态
enable "[NAMESPACE:]TABLE"                      启用该表  
disable "[NAMESPACE:]TABLE"                     禁用该表
drop "[NAMESPACE:]TABLE"                        删除该表(处于禁用状态的表才能删除)put "[NAMESPACE:]TABLE","ROW_KEY","cf:cn",N    插入数据(表+行键+列族+列+值)scan "[NAMESPACE:]TABLE"                        全局查找
get "[NAMESPACE:]TABLE","ROW_KEY","cf:cn"       查找某列的值
exists "[NAMESPACE:]TABLE"                      是否存在该表
delete "[NAMESPACE:]TABLE","ROW_KEY","cf:cn"    面向列删除
deleteall "[NAMESPACE:]TABLE","ROW_KEY"          面向行删除
truncate "[NAMESPACE:]TABLE"                     删除全表数据(注意:truncate使用前不需要禁用表,容易导致误用)incr "[NAMESPACE:]TABLE","ROW_KEY","cf:cn",N    需要针对不存在的列操作(针对存在的列会报错)会先在指定的列族中创建这个列,创建列后,HBase会将其值设置位0。然后,HBase会将指定的增量加到这个初始值上。
get_counter "[NAMESPACE:]TABLE","ROW_KEY","cf:cn" 获取计数器的值(计数器的值通常只能通过`incr`改变)
  1. Hive 表映射(行列式数据库表转换)
create external table yb12211.student_from_hbase(stu_id int,stu_name string,  stu_age int,score_hive int,score_hbase int
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'// Hive表的数据实际存储在HBase里面  
with serdeproperties("hbase.columns.mapping"=":key,base:name,base:age,scores:hive,scores:hbase")
tblproperties("hbase.table.name"="hbase_test:student_info");// 指定HBase的表名(需完整)
  • 确定映射关系:
stu_id <-> :key (RowKey)
stu_name <-> base:name
stu_age <-> base:age 
score_hive <-> scores:hive
score_hbase <-> scores:hbase
  1. 预分区
  • 预先分区的目的

    • 避免热点问题或者负载不均衡
    • 避免因频繁数据迁移导致的性能下滑
  • 默认分区策略

    • IncreasingToUpperBoundRegionSplitPolicy : 当Region大小逐渐增加达到上界会触发分裂。
  • 预分区

create '[NAMESPACE:]TABLE','CF1','CF2',{NUMREGIONS=>4,SPLITALGO=>'UniformSplit | HexStringSplit'} // 分区数量和分裂算法
create 'TABLE','CF','CN',SPLITS=>['100','200','300'] // 分隔成数据范围为0~100,100~200,200~300的Region// 也可写成['fff','qqq','zzz']前提是行键是由字母组成的,并且符合这种形式
  • 查看分区情况
scan 'hbase:meta',{STARTROW="hbase_test:test_split",LIMIT=>3}

五、HBase应用场景

  • 增量数据——时间序列数据

    • 高容量、高速写入
    • HBase之上有OpenTSDB模块,可以满足时序类场景,比如传感器,系统监控,股票行情监控等。
  • 信息交换——消息传递

    • 高容量、高速读写
    • 消息应用的软件建立在HBase之上
  • 内容服务——Web后端应用程序

    • 高容量,高速读写
    • 头条类、新闻类的新闻、网页、图片存储在HBase上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/277110.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP异世界云商系统开源源码

系统更新与修复列表 1. 基于彩虹的二次开发 - 对彩虹系统进行了二次开发&#xff0c;增强了系统的功能和性能。2. 新增自定义输入框提示内容&#xff08;支持批量修改&#xff09; - 用户可以自定义输入框的提示内容&#xff0c;并支持批量修改&#xff0c;提升用户体验。3. 新…

劲仔食品三年倍增,抢先打响鹌鹑蛋“健康”属性品牌之争?

如果说&#xff0c;进入2024年后&#xff0c;在股价继续陷入回调状态的食品板块中有个股走势表现相对亮眼&#xff0c;那么劲仔食品必是其中之一。 从去年发布2023年三季度业绩公告以来&#xff0c;其强劲的业绩表现就带动了股价走出小趋势。2023年10月23日至今2024年3月13日收…

C#构建类库

类库程序集能将类型组合成易于部署的单元&#xff08;DLL文件&#xff09;&#xff0c;为了使编写的代码能够跨多个项目重用&#xff0c;应该将他们放在类库程序集中。 一、创建类库 在C#中&#xff0c;构建类库是指创建一个包含多个类的项目&#xff0c;这些类可以被其他应用…

RocketMQ 面试题及答案整理,最新面试题

RocketMQ的消息存储机制是如何设计的&#xff1f; RocketMQ消息存储机制的设计原理&#xff1a; 1、CommitLog文件&#xff1a; 所有的消息都存储在一个连续的CommitLog文件中&#xff0c;保证了消息的顺序写入&#xff0c;提高写入性能。 2、消费队列&#xff1a; 为每个主…

Task-balanced distillation for object detection用于

Task-balanced distillation for object detection用于目标检测的任务平衡蒸馏 摘要 主流的目标检测器通常由分类和回归两个子任务组成&#xff0c;由两个并行头部实现。这种经典的设计范式不可避免的导致分类得分和定位质量&#xff08;IOU&#xff09;之间的空间分布不一致…

漫途桥梁结构安全监测方案,护航桥梁安全!

桥梁作为城市生命线的重要组成部分&#xff0c;承载着城市交通、物流输送、应急救援等重要职能。然而&#xff0c;随着我国社会经济的飞速发展&#xff0c;桥梁所承载的交通流量逐年增长&#xff0c;其安全性所面临的挑战亦日益严峻。例如恶劣的外部环境、沉重的荷载以及长期使…

python爬虫实战——抖音

目录 1、分析主页作品列表标签结构 2、进入作品页前 判断作品是视频作品还是图文作品 3、进入视频作品页面&#xff0c;获取视频 4、进入图文作品页面&#xff0c;获取图片 5、完整参考代码 6、获取全部作品的一种方法 本文主要使用 selenium.webdriver&#xff08;Firef…

HarmonyOS NEXT应用开发—自定义视图实现Tab效果

介绍 本示例介绍使用Text、List等组件&#xff0c;添加点击事件onclick,动画&#xff0c;animationTo实现自定义Tab效果。 效果预览图 使用说明 点击页签进行切换&#xff0c;选中态页签字体放大加粗&#xff0c;颜色由灰变黑&#xff0c;起到强调作用&#xff0c;同时&…

揭示数据在内存中存储的秘密!

** ** 悟已往之不谏&#xff0c;知来者犹可追 ** ** 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#xff0c;别忘了给个免费的赞哟~ 整数在内存中的存储 整数的表达方式有三种&#xff1a;原码、反码、补码。 三种表示方法均有符号位和数值位两部分…

Oracle数据库:使用 bash脚本 + 定时任务 自动备份数据

Oracle数据库&#xff1a;使用 bash脚本 定时任务 自动备份数据 1、前言2、为什么需要自动化备份&#xff1f;3、编写备份脚本4、备份脚本授权5、添加定时任务6、重启 crond / 检查 crond 服务状态7、备份文件检查 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

torch.backends.cudnn.benchmark 作用

相关参数 torch.backends.cudnn.enabled torch.backends.cudnn.benchmark torch.backends.cudnn.deterministictorch.backends.cudnn.benchmark True&#xff1a;将会让程序在开始时花费一点额外时间&#xff0c;为整个网络的每个卷积层搜索最适合它的卷积实现算法&#xff0c…

力扣59. 螺旋矩阵 II

思路&#xff1a;此题思路就是绕圈遍历&#xff0c;全靠条件处理技巧&#xff0c;重点要清楚的就是循环不变量&#xff1a;左闭右开&#xff08;即拐弯处的一个数&#xff0c;留给第二行处理&#xff09; 以下是代码随想录的作者的一张图片&#xff0c;每次for循环&#xff0c;…

Docker容器化技术(使用Docker搭建论坛)

第一步&#xff1a;删除容器镜像文件 [rootlocalhost ~]# docker rm -f docker ps -aq b09ee6438986 e0fe8ebf3ba1第二步&#xff1a;使用docker拉取数据库 [rootlocalhost ~]# docker run -d --name db mysql:5.7 02a4e5bfffdc81cb6403985fe4cd6acb0c5fab0b19edf9f5b8274783…

深入浅出计算机网络 day.2 概论⑥ 计算机网络体系结构

上帝疯狂杜撰世界悲情的命题 将凉薄和荒芜尽写 —— 24.3.13 内容概述 1.常见的三种计算机网络体系结构 2.计算机网路体系结构分层的必要性 3.计算机网络体系结构分层思想举例 4.计算机网络体系结构中的专用术语 一、常见的三种计算机网络体系结构 1.OSI参考模型 …

基于ElasticSearch存储海量AIS数据:时空立方体索引篇

文章目录 引言I 时间维切分II 空间范围切分引言 索引结构制约着查询请求的类型和处理方式,索引整体架构制约着查询请求的处理效率。随着时间推移,AIS数据在空间分布上具备局部聚集性,如 果简单地将所有AIS数据插入一个索引结构,随着数据量增长,索引的更新效率、查询效率及…

【Linux】Centos7上安装MySQL5.7

目录 1.下载安装包2. 上传安装包3.将 mysql 解压到/usr/local/4.重命名5.创建mysql用户及用户组6. 进入 mysql 目录修改权限7. 安装依赖库8. 执行安装脚本9. 复制启动脚本到资源目录10. 拷贝 my.cnf&#xff0c;并赋予权限11. 配置环境变量12. 启动 mysqld13. 登录 MySQL&#…

vite打包时发布时,放在服务器的二级目录中

方式一 hash模式 如果我们的站点根目录为 public , 我们访问的时候使用的是 http://www.abc.com/ 访问到了站点的根目当&#xff0c;现在我们要访问 http://www.abc.com/mysite/#/ 配置如下 修改 vite.config.js base:“/mysite/” 修改 router中的配置 上面的步骤完成&…

安装Pytorch——CPU版本

安装Pytorch——CPU版本 1. 打开pytorch官网2. 选择pip安装pytorch-cpu3.复制安装命令4. 在cmd命令窗口&#xff0c;进入你的虚拟环境4.1 创建虚拟环境4.2 进行安装 5. 安装成功6. 进行测试——如下面步骤&#xff0c;如图6.1 输入 python6.2 输入 import torch6.2 输入 print …

C语言葵花宝典之——文件操作

前言&#xff1a; 在之前的学习中&#xff0c;我们所写的C语言程序总是在运行结束之后&#xff0c;就会自动销毁&#xff0c;那如果我们想将一个结果进行长期存储应该如何操作呢&#xff1f;这时候就需要我们用文件来操作。 目录 1、什么是文件&#xff1f; 1.1 程序文件 1.2…

在idea中配置tomcat服务器,部署一个项目(下载教程加链接)

第一步&#xff1a;把Tomcat下载好 ww​​​​​​​Apache Tomcat - Welcome! 链接如上&#xff1a;进去后在左边找到Tomcat8点击进去后 找到图下内容 第二步&#xff1a; 打开这个文件点击bin进去 会出现一个黑色框框&#xff0c;也就是服务器 完成后就可以在浏览器输入…