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

【赵渝强老师】崖山数据库的体系架构

YashanDB数据库中有数据库和数据库实例这两个基本的概念并且从体系架构的组成上看YashanDB数据库又分为了存储结构、进程线程结构和内存结构。因此要掌握YashanDB的体系架构就需要从数据库与数据库实例入手并进一步深入到其内部核心的结构中。视频讲解如下【赵渝强老师】崖山数据库的还原数据一、 数据库与数据库实例YashanDB数据库英文名称叫做Yashan Database。这里所说的数据库是一个物理上的概念即指物理操作系统的文件或者磁盘的集合。换句话来说YashanDB数据库是由物理硬盘上许多的文件组成。这些文件包含了数据文件、控制文件、重做日志文件等等。数据库的配置信息、日志信息以及表中的数据最终都是存储在这些文件当中。YashanDB数据库的实例英文名称叫做Yashan Database Instance它是一个逻辑上的概念由操作系统的内存和操作系统中的进程组成。这些内存由同一个宿主机上运行的进程所共享。即使没有磁盘存储的数据库文件数据库实例也能存在但是这样的数据库实例没有实际的意义。对于一个正常运行的YashanDB数据库实例来讲可以把它看成是YashanDB数据库文件在内存中的镜像。客户端需要通过操作系统中的进程来访问内存中的这些镜像最终读写YashanDB数据库的数据。在不考虑YashanDB数据库集群的情况下一般情况下一个YashanDB数据库服务只包括一个YashanDB数据库和一个YashanDB数据库的实例。一个实例对应一个数据库。它们之间的对应关系如下图所示。二、 存储结构YashanDB数据库由硬盘上的文件组成而要读写数据需要通过YashanDB实例来完成。那么YashanDB数据库是如何存储数据的呢要搞清楚这个问题就需要理解什么是YashanDB数据库的存储结构。YashanDB数据库的存储结构是由逻辑存储结构和物理存储结构组成。一般来说数据库无论是关系型数据库还是NoSQL数据库在存储结构上都是通过逻辑存储结构来管理物理存储结构。下面分别介绍这两部分。2.1 YashanDB的逻辑存储结构从逻辑组成上来看一个YashanDB数据库是由一个或者多个表空间等组成一个表空间(tablespace)由一组段组成一个段(segment)由一组区组成一个区(extent)由一批数据库块组成一个数据库块(block)对应一个或多个物理块。如下图所示。下面分别对这些逻辑单元进行介绍。2.1.1 Database数据库Database是YashanDB中最大的逻辑单元它是按照数据结构来组织、存储和管理数据的仓库。所有的表、索引、存储过程、触发器等都被包含在了YashanDB的数据库中。2.1.2 Tablespaces表空间表空间(Tablespace)是数据库的逻辑划分一个表空间只能属于一个数据库。表空间对应一个或多个数据文件通常由相关的段组成。表空间的大小是它所对应的数据文件大小的总和,所有的数据库对象都存放在指定的表空间中。但主要存放的对象是表所以称作表空间。执行下面的语句可以查看YashanDB中的表空间信息。$ yasql/assysdbaSQLselecttablespace_namefromdba_tablespaces;# 输出的信息如下TABLESPACE_NAME------------------SYSTEM SYSAUXTEMPSWAP USERS UNDO6rowsfetched.# 在YashanDB数据库中有些表空间必须存在而有些表空间可以没有。下表列举了YashanDB数据库中的表空间信息以及它们各自在作用。2.1.3 Segments段一个段是分配空间时的一个逻辑结构该逻辑结构可能是表、索引或其他对象存储的一个区域它是数据库对象使用的空间集合。段可以有表段、索引段、回滚段、临时段和高速缓存段等而最常用的段就是表段和索引段。下面的语句将查询YashanDB数据库中段的信息。SQLselectowner,segment_name,segment_typefromdba_segmentswheresegment_typeTABLEandrownum5unionselectowner,segment_name,segment_typefromdba_segmentswheresegment_typeINDEXandrownum5;# 输出的信息如下OWNER SEGMENT_NAME SEGMENT_TYPE------------------ ------------------------ ---------------------MDSYS SPATIAL_REF_SYSTABLEMDSYS SPATIAL_REF_SYS_PKEYINDEXSYS I_OPTSTAT_OPR1INDEXSYS I_OPTSTAT_TASK1INDEXSYS I_OPTSTAT_TASK2INDEXSYS MON_MODS_ALL$TABLESYS TABLE_PRIVILEGE_MAP$TABLESYS YLS$PROPSTABLE8rowsfetched# 这里只显示了YashanDB数据库中部分段的信息。2.1.4 extents区区是数据库存储空间分配的一个逻辑单位它由连续数据块所组成。每一个段是由一个或多个区组成。当一个段中间所有使用的区空间已完全使用YashanDB数据库为该段重新分配一个新的范围即分配一组新的区来存储段中的数据。2.1.5 Data Block数据块数据块是YashanDB数据库管理的最小逻辑存储单位它也是数据库使用的I/O最小单位 即一次I/O读写的数据量大小。数据块的大小由db_block_size参数确定。数据块是处理YashanDB数据库更新、查询或者插入数据时的最小单位。当用户从表中读取数据时I/O操作将从数据库文件中以数据块为单位读取或者写入数据YashanDB数据库默认的数据块的大小为8 KB即使只想检索4 KB的数据也需要读取8 KB的数据量。通过下面的语句查看当前数据块设置的大小SQLshowparameter db_block_size# 输出的信息如下NAMEVALUE-------------------- ---------DB_BLOCK_SIZE81921rowfetched.2.2 YashanDB的物理存储结构YashanDB的物理存储结构就是指的YashanDB数据库在硬盘上存储的各种文件包括数据文件、联机日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件等。下面分别介绍这些文件以及它们的作用。2.2.1 数据文件Data File一个数据库由多个表空间组成而表空间可以由多个数据文件组成的数据文件是真正存放数据库数据的。一个数据文件就是一个硬盘上的文件。表和索引中的数据在物理上是被存放在数据文件中的。当查询表中数据的时候如果内存中没有该表的数据那么YashanDB数据库的服务器进程将读取该表所在的数据文件然后把数据存放到内存中。通过下面的语句可以查看当前数据库中存在的数据文件和对应的表空间SQLselectfile_name,tablespace_namefromdba_data_files;# 输出的信息如下FILE_NAME TABLESPACE_NAME------------------------------------------------------ -----------------/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/system SYSTEM/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/sysaux SYSAUX/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/tempTEMP/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/swap SWAP/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users USERS/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/undo UNDO6rowsfetched.当表空间中的数据文件写满时可以通过下面的语句往表空间中添加新的数据文件。例如往users表空间中添加一个10M大小的数据文件。SQLaltertablespaceusersadddatafile/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users02size10M;执行下面的语句重新查看YashanDB数据库的数据文件信息SQLselectfile_name,tablespace_namefromdba_data_files;# 输出的信息如下FILE_NAME TABLESPACE_NAME------------------------------------------------------- -----------------/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/system SYSTEM/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/sysaux SYSAUX/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/tempTEMP/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/swap SWAP/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users USERS/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/undo UNDO/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/users02 USERS7rowsfetched.2.2.2 重做日志文件Redo Log File一个数据库可以有多个联机重做日志文件它记录了数据库的变化。例如当YashanDB数据库产生异常时导致对数据的改变没有及时写入到数据文件中。这时YashanDB数据库就会根据联机重做日志文件中的信息来获得数据库的变化信息并根据这些信息把这些改变写到数据文件中。换句话来说联机重做日志文件中记录的重做日志可以用来进行数据库实例的恢复。下图展示了YashanDB数据库写入数据的过程。从上图可以看出当前客户端成功提交事务时数据有可能还没有写到数据文件上。如果此时数据库实例发生了崩溃写入的数据是会丢失的。当重新启动数据库实例时YashanDB会利用成功写入的重做日志来恢复实例在内存中的数据这个过程叫做实例恢复。由YashanDB数据库的SMON进程自动完成。通过下面的语句查看当前YashanDB数据库中存在的联机重做日志文件和对应的日志组信息。SQLselectid,name,statusfromv$logfile;# 输出的信息如下ID NAMESTATUS-- --------------------------------------------------- ---------0/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo1 INACTIVE1/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo2 INACTIVE2/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo3CURRENT3/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo4 INACTIVE4rowsfetched.下表说明了重做日志文件不同状态的含义。下面是关于重做日志文件的一些基本操作。1添加新的重做日志文件。SQLalterdatabaseaddlogfile(redo5size200m);2重新查询已存在的重做日志文件。SQLselectid,name,statusfromv$logfile;# 输出的信息如下ID NAMESTATUS--- ---------------------------------------------------- ---------0/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo1 INACTIVE1/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo2 INACTIVE2/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo3CURRENT3/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo4 INACTIVE4/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo5 NEW5rowsfetched.3切换重做日志文件。SQLaltersystem switch logfile;4重新查询已存在的重做日志文件。SQLselectid,name,statusfromv$logfile;# 输出的信息如下ID NAMESTATUS--- ---------------------------------------------------- ---------0/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo1 INACTIVE1/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo2 INACTIVE2/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo3 ACTIVE3/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo4 INACTIVE4/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo5CURRENT5rowsfetched.5触发一个检查点并重新查询已存在的重做日志文件。SQLaltersystemcheckpoint;SQLselectid,name,statusfromv$logfile;# 输出的信息如下ID NAMESTATUS--- ----------------------------------------------------- ---------0/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo1 INACTIVE1/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo2 INACTIVE2/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo3 INACTIVE3/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo4 INACTIVE4/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/redo5CURRENT5rowsfetched.2.2.3 控制文件Control File一个数据库至少要有一个控制文件控制文件中存放了YashanDB数据库的物理结构信息。这些物理结构信息就包括:1数据库的名字。2数据文件和联机日志文件的名字及位置。3创建数据库时的时间戳。4备份的元信息。YashanDB数据库在启动过程中会根据控制文件中记录的数据文件和联机重做日志文件的位置信息来打开数据库。由于控制文件非常重要为了更好的保护数据库通常在执行数据库备份时是需要备份控制文件的。可以通过下面的语句查看当前存在的控制文件。SQLselectnamefromv$controlfile;# 输出的信息如下NAME----------------------------------------------------------------/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/ctrl1/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/ctrl2/home/yashan/yasdb/yasdb_data/db-1-1/dbfiles/ctrl33rowsfetched.可以看到在默认情况下YashanDB数据库有三个控制文件这三个控制文件的内容是一样的。这样的方式称之为控制文件的多路复用。即使其中的一个控制文件出现了问题YashanDB数据库也可以使用另一个控制文件。这样也不会因为数据库的损坏从而造成数据的丢失。2.2.4 归档日志文件归档日志文件是联机重做日志文件的副本它也记录了对数据库改变的历史。下面的语句将查看当前数据库的日志模式。SQLselectlog_modefromv$database;# 输出的信息如下LOG_MODE-----------------ARCHIVELOG1rowfetched.YashanDB数据库默认是归档模式。在归档模式下YashanDB可以执行数据库的联机备份或者叫做数据库的热备份而在非归档模式下YashanDB只能执行数据库的离线备份或者叫做数据库的冷备份。2.2.5 参数文件配置参数文件是名为yasdb.ini的文本文件存放在$YASDB_DATA/config路径下产品安装时所指定的数据库初始配置参数将保存在此文件中后续数据库运行过程中对配置参数的非memory修改也将持久化到此文件中。下面展示了参数文件的内容$pwd/home/yashan/yasdb/yasdb_data/db-1-1/config $catyasdb.ini# 输出的信息如下_CLUSTER_ID2fd38e8003d1f864a081f24c187d4b2e NODE_ID1-1:1 CONTROL_FILES(?/dbfiles/ctrl1,?/dbfiles/ctrl2,?/dbfiles/ctrl3)ARCH_CLEAN_IGNORE_MODEBACKUP CGROUP_ROOT_DIR/sys/fs/cgroup LISTEN_ADDR192.168.79.10:1688 REPLICATION_ADDR192.168.79.10:1689 RUN_LOG_FILE_PATH/home/yashan/yasdb/log/db-1-1/run RUN_LOG_LEVELINFO SLOW_LOG_FILE_PATH/home/yashan/yasdb/log/db-1-1/slow CHARACTER_SETUTF8 TIME_ZONE 08:00 DATA_BUFFER_SIZE 512M CHECKPOINT_TIMEOUT 3002.2.6 密码文件密码文件是名为yasdb.pwd的文本文件不可直接进行编辑其路径受PASSWORD_FILE参数控制。该文件用于存储SYS用户的密码。SQLshowparameter PASSWORD_FILE;# 输出的信息如下NAMEVALUE----------------- -----------------------PASSWORD_FILE ?/instance/yasdb.pwd1rowfetched.# 密码文件内容为加密后信息虽然为文本文件但不能直接修改里面的内容。2.2.7 告警日志文件告警日志文件按照时间的先后顺序记录了数据库的重大活动和所发生的错误信息以及警告信息。因此当YashanDB数据库出现任何问题的时候首先就应当检查告警日志文件。警报文名字的格式是alert.log。警报文件的位置默认保存在了存放在$YASDB_DATA/log/alert目录下如下所示$pwd/home/yashan/yasdb/yasdb_data/db-1-1/log/alert $ tail alert.log# 输出的信息如下2025-12-03 15:35:11.569|12|Incident|0|0||the incident was controlled by flood,problem id4,last incident id77 2025-12-03 15:45:38.294|12|Incident|0|0||the incident was controlled by flood,problem id6,last incident id80 2025-12-03 15:54:53.672|12|Incident|0|0||the incident was controlled by flood,problem id1,last incident id82 2025-12-03 17:10:29.602|12|Incident|0|0||the incident was controlled by flood,problem id1,last incident id87 2025-12-03 17:58:03.305|12|Incident|0|0||the incident was controlled by flood,problem id1,last incident id90 2025-12-03 18:11:16.950|12|Incident|0|0||the incident was controlled by flood,problem id1,last incident id91 2025-12-04 15:00:03.294|12|Incident|0|0||the incident was controlled by flood,problem id1,last incident id96 2025-12-04 15:50:00.629|12|Incident|0|0||the incident was controlled by flood,problem id3,last incident id107 2025-12-04 15:52:31.697|12|Incident|0|0||the incident was controlled by flood,problem id2,last incident id116 2025-12-04 15:52:32.767|12|Incident|0|0||the incident was controlled by flood,problem id5,last incident id1182.2.8 跟踪文件跟踪文件是每个YashanDB数据库服务器进程都有的日志文件。当数据库运行中出现问题时通过查看跟踪文件中的内容可以帮助诊断YashanDB数据库的问题。因为每个服务器进程都会将错误信息写到跟踪文件中。因此数据库管理员DBA就可以根据跟踪文件的信息来查看进程中所发生的错误。在默认情况下YashanDB数据库的跟踪文件的位置保存在$YASDB_DATA/diag/trace/目录下。2.2.9 备份文件备份文件就是在数据库发生介质损坏的时候用来还原Restore数据库并执行恢复Recover数据的文件。三、 进程线程结构YashanDB实例启动后创建YASDB进程处理连接到数据库实例的客户端进程的请求。YASDB进程主要包含后台线程以及处理客户请求的工作线程。因此YashanDB采用的是多线程架构这样可以充分利用多核处理器的计算能力提高系统的并发性和响应性。在多线程架构中由一个主线程负责程序的初始化和协调工作然后创建多个子线程来执行具体的任务。每个线程可以独立地执行特定的代码块但它们共享进程的资源和内存空间。通过下面的步骤能够确定YashanDB数据库实例的进程信息和包含的线程信息。1确定YASDB进程的PID。$ps-ef|grep yasdb# 输出的信息如下yashan 45244.../home/yashan/yasdb/23.4.1.102/bin/yasdb open-D/home/yashan/yasdb/yasdb_data/db-1-1# 这里的45244是YASDB的进程PID。2确定YASDB进程所包含的线程信息。$ top-H-p 45244# 输出的信息如下......PID USER......COMMAND 说明 45300 yashan......MMON AWR快照自动管理线程 45244 yashan......yasdb 主线程 45245 yashan......TIMER 逻辑时钟线程 45246 yashan......BUFFER_POOL BUFFER_POOL辅助线程 45247 yashan......PRELOADER 冷数据表扫描预读线程 45248 yashan......PRELOADER 45249 yashan......SMON 系统监控线程 45250 yashan......CKPT 检查点任务调度线程 45251 yashan......DBWR 数据脏块刷新线程 45252 yashan......DBWR 45253 yashan......SCHD_TIMER 高精度定时器线程 45254 yashan......REPL_TCP_LSNR HA监听线程 45260 yashan......LISTENER_LOG 监听日志线程 45261 yashan......UDS_LSNR 本地网络监听线程 45262 yashan......TCP_LSNR TCP监听线程 45263 yashan......RD_ARCH 归档文件传输线程 45264 yashan......ARCH_DATA 归档文件清理线程 45265 yashan......HEALTH_MONITOR 健康检查监控线程 45291 yashan......HOT_CACHE_RECYC 热块回收线程 45292 yashan......LOGW redo刷盘线程 45299 yashan......XFMR 后台转换任务调度线程 45301 yashan......JOB_QUEUE JOB的执行线程 45303 yashan......XFMR_WORKER_0 LSC后台转换任务执行线程四、 内存结构YashanDB数据库的内存结构可以看成是数据库文件的镜像而每个YashanDB数据库实例有两个关联的内存结构共享内存区域SGAShared Global Area和私有内存区域SPASession Private Area。共享内存区域是一组所有后台线程以及会话能够共享访问的内存结构例如数据缓存、SQL缓存、数据字典缓存等。私有内存区域是会话独占和管理的内存区域例如会话栈内存、会话堆内存。下图展示了YashanDB数据库实例的内存结构。4.1 共享内存区域SGA共享内存区域SGAShared Global Area一般共享给多个会话或线程使用主要包括内存共享池SHARE POOL、数据缓存DATA BUFFER、有界加速缓存AC BUFFER以及虚拟内存VIRTUAL MEMORY。通过下面的语句可以查看共享内存区域中的缓冲池SQLselect*fromv$sga;# 输出的信息如下NAME SIZE--------------------------------- ---------------------databuffer536870912temporarybuffer134217728large pool134217728redo buffer67108864hot cache16777216sharepool335544320globalapplication pool16777216dbwr buffer8404992job pool4194304audit queue buffer1677721610rowsfetched.下面分别介绍其中的主要缓冲池的功能和作用。4.1.1 内存共享池SHARE POOL内存共享池包含多个内存区域执行下面的语句可以进行查看SQLselectname,sum(size)fromv$share_poolgroupbyname;# 输出的新如下NAMESUM(SIZE)--------------------------------- -----------SQLPOOL201326448DICTIONARY CACHE POOL67108864LOCKPOOL33554432CURSORPOOL33554432DSTB POOL0RECOVERY BUDDY POOL0BLOCK RES POOL0NON BLOCK RES POOL0GRC REQ POOL0GCS PC POOL0GRC OBJECT POOL0GLS POOL0STREAM POOL0FREE POOL14414rowsfetched.这里最主要的就是SQL POOL它表示SQL的缓存。该内存区域用户保存SQL解析树和执行计划。SQL引擎在执行语句时首先会匹配SQL缓存如果存在相同语句则无需编译直接使用已编译的执行计划从而避免硬解析节省开销。下面通过一个简单的示例来说明SQL POOL的功能。1使用scott用户登录YashanDB数据库实例。$ yasql scott/tiger2执行下面的SQL语句三次。SQLselectcount(empno)fromemp;SQLselectcount(empno)fromemp;SQLselectcount(empno)fromemp;3切换到管理员用户监控SQL POOL中的信息。SQLselectsql_text,parse_calls,loads,executionsfromv$sqlwheresql_textlike%count(empno)%;# 输出的信息如下SQL_TEXT PARSE_CALLS LOADS EXECUTIONS--------------------------------- ------------- ------- ------------selectcount(empno)fromemp313# 从输出的信息可以看出# 该条SQL语句被加载了1次、解析了3次其中1次为硬解析2次为软解析# 并执行了3次。4.1.2 数据缓存DATA BUFFER数据缓存用于缓存当前或最近使用的从磁盘读取的数据块的拷贝可优化数据库的I/O减少物理读/写。采用LRU算法管理当缓存区域内存不足、需要回收内存以重用时选择一些最长时间未使用的缓存块进行淘汰回收。数据缓存分为行数据缓存和列数据缓存行数据缓存用于存放行表相关的数据块拷贝列数据缓存用于存放列表相关的数据块拷贝。4.1.3 有界加速缓存AC BUFFER有界加速缓存类似于数据缓存但缓存的对象不同有界加速缓存只存放基于有界理论的AC对象。4.1.4 虚拟内存VMVIRTUAL MEMORY虚拟内存主要是由需要物化数据的SQL算子使用且在物化对象过大时将磁盘作为虚拟内存使用。虚拟内存又分为行虚拟内存和列虚拟内存相关SQL算子计算行存表数据时使用行虚拟内存计算列存表数据时使用列虚拟内存。4.2 私有内存区域SPA私有内存区域SPASession Private Area是每个会话创建时分配的独占内存区域与共享内存区域不同此区域的内存由会话独占和管理会话退出时释放该内存区域主要是满足SQL执行时的各种内存空间需求。该区域主要包括两部分会话栈内存该区域一般用于存放会话执行过程中临时使用的局部变量等。会话堆内存该区域一般用于存放生命周期较长的运行期数据。通过下面的语句可以查看每个会话的SPA的内存区域。SQLselecttype,sum(use_size)fromV$SESSION_SPAgroupbytype;# 输出的信息如下TYPESUM(USE_SIZE)--------------------------------- -------------vm buffer pool0large pool0app pool0pq pool0columnar vm buffer pool0

相关文章:

【赵渝强老师】崖山数据库的体系架构

YashanDB数据库中有数据库和数据库实例这两个基本的概念,并且从体系架构的组成上看,YashanDB数据库又分为了存储结构、进程线程结构和内存结构。因此,要掌握YashanDB的体系架构就需要从数据库与数据库实例入手,并进一步深入到其内…...

亚马逊停止旧款 Kindle 支持,用户与市场面临新变局

2026 年旧款 Kindle 告别 Kindle 商店亚马逊宣布从 2026 年 5 月 20 日起,停止对 2013 年前发布的 Kindle 电子阅读器和 Fire 平板电脑的支持。届时,这些设备将无法访问 Kindle 商店,不能借阅、购买或下载新书籍,但仍可阅读设备上…...

GraalVM Native Image内存优化实战手册(含JDK21+GraalVM24.1插件全链路安装避坑清单)

第一章:GraalVM Native Image内存优化实战手册导论GraalVM Native Image 将 Java 应用提前编译为独立的本地可执行文件,显著降低启动延迟与运行时内存开销。然而,默认构建的 native image 常因反射、动态代理、资源加载等隐式依赖而保留大量未…...

小而强,Meta推出超级智能实验室首款AI模型Muse Spark

文章目录前言二、啥是Muse Spark?说白了就是个"会思考的小机灵鬼"三、"小而强"到底是啥意思?四、不止会聊天,还会"看图说话"五、专门请了1000个医生来"教"它六、从"开源先锋"到"闭源…...

C# 面试高频题:装箱和拆箱是如何影响性能的?伟

OCP原则 ocp指开闭原则,对扩展开放,对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则(DIP) 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程, 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...

Unity发布京东小游戏圃

从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...

技术分享 | MySQL 8.0复制架构主从自动切换脚本

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

Java原生镜像内存优化实战手册(含AOT编译期内存剖分图谱):从386MB→47MB的7次关键裁剪记录

第一章:Java原生镜像内存优化全景图谱Java 原生镜像(Native Image)通过 GraalVM 的 AOT(Ahead-of-Time)编译技术,将 Java 字节码直接编译为平台原生可执行文件,在启动速度、内存占用和资源效率方…...

​有机溶剂回收设备厂家实测

测评主体公示本次测评对象包括:可迪尔、蓝太克、英飞、艾科,以及有机溶剂回收设备厂家(选取三家技术路径不同的具体设备:厂家A‑活性炭吸附型、厂家B‑沸石转轮浓缩型、厂家C‑冷凝回收型)。 统一测评维度:…...

仅限首批200名开发者获取:Java 25虚拟线程高并发架构迁移评估工具包(含代码扫描器+风险热力图+ROI预测模型)

第一章:Java 25虚拟线程高并发架构迁移全景认知Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,标志着JVM并发模型进入轻量级、高密度、低开销的新纪元。虚拟线程基于Project Loom多年演进,以java.lan…...

案例分析:学术文献综述 Agent Harness

案例分析:学术文献综述 Agent Harness——从手动“文献堆沙”到智能“知识城堡”的AI构建器关键词:学术文献综述 Agent、Agent Harness、多智能体协作、大语言模型应用、学术自动化、知识图谱构建、文献检索-筛选-总结流水线摘要:本文以Chatb…...

从田间到大屏只要1.8秒:PHP异步任务队列+Redis流式渲染农业可视化看板(实测QPS 1270+)

第一章:从田间到大屏只要1.8秒:PHP异步任务队列Redis流式渲染农业可视化看板(实测QPS 1270)在智慧农业场景中,传感器集群每秒上报数千条温湿度、土壤EC值、光照强度等时序数据,传统同步渲染方式导致看板平均…...

PHP容器化落地国产化替代的最后1公里:从Docker镜像构建、OpenEuler适配到等保2.0合规部署(含12项硬性检测项)

第一章:PHP容器化部署国产化适配方案在信创背景下,PHP应用需适配国产操作系统(如统信UOS、麒麟V10)、国产CPU架构(鲲鹏、飞腾、海光、兆芯)及国产中间件生态。容器化是实现跨平台一致部署与国产环境快速迁移…...

环境变量-代理/PowerShell乱码

设置代理[Environment]::SetEnvironmentVariable(HTTP_PROXY, socks5://127.0.0.1:5800, User) [Environment]::SetEnvironmentVariable(HTTPS_PROXY, socks5://127.0.0.1:5800, User) [Environment]::SetEnvironmentVariable(ALL_PROXY, socks5://127.0.0.1:5800, User) Write…...

NVIDIA Profile Inspector:深度优化显卡性能的游戏技术解决方案

NVIDIA Profile Inspector:深度优化显卡性能的游戏技术解决方案 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 在游戏运行过程中,用户常常面临帧率不稳定、画面撕裂、输入延迟高…...

南京道尔斯特机架式PDU重新定义工业级安全电源管理新范式

在数字化基建加速迭代、工业互联网深度渗透的现在,电力分配作为工业数字底座的关键枢纽,其安全性、可靠性与智能化水平​行业痛点凸显:传统电源方案难以适配工业高负载场景刚需​当前,随着GPU服务器、工业PLC、精密医疗设备等大功…...

手机扩大屏定制厂家:菲涅尔高清模压技术护航跨境出海

在跨境电商快速发展的如今,手机屏幕放大器作为移动配件领域的细分品类,正在成为全球卖家关注的焦点。然而,货源不稳定、产品同质化、知识产权风险、镜片清晰度不佳等行业痛点,始终困扰着跨境电商从业者。如何找到一家技术过硬、供…...

Yu-AI-Agent 项目(AI 恋爱大师智能体) · 学习笔记

Yu-AI-Agent 项目(AI 恋爱大师智能体) 学习笔记 本项目是 AI 超级智能体 项目的 Java 前后端部分,学习自 鱼皮 编程导航 的 AI 开发实战课程及开源代码仓库。 基于 Spring Boot 3 Java 21 Spring AI 构建了 AI 恋爱大师应用与 ReAct 模式…...

如何释放CPU全部潜能:CPUDoc智能优化工具完全指南

如何释放CPU全部潜能:CPUDoc智能优化工具完全指南 【免费下载链接】CPUDoc 项目地址: https://gitcode.com/gh_mirrors/cp/CPUDoc 你是否经常感觉电脑性能未能充分发挥?明明配置不错的硬件,却在运行大型软件或游戏时出现卡顿&#xf…...

【Hot 100 刷题计划】 LeetCode 74. 搜索二维矩阵 | C++ 二分查找 (一维展开法)

LeetCode 74. 搜索二维矩阵 📌 题目描述 题目级别:中等 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target…...

凌晨 6 点,裁员 3 万:AI时代最残酷的一幕来了

3月31日凌晨6点,很多甲骨文(Oracle)员工还在睡梦中,手机突然亮了。一封来自“Oracle Leadership”(甲骨文管理层)的邮件,只有短短几句话:“经过仔细评估公司当前业务需要&#xff0c…...

【Loom生产环境禁用清单】:这7个Spring Boot自动配置项正在 silently 杀死你的虚拟线程吞吐量

第一章:Java 25虚拟线程在高并发架构下的性能本质洞察Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,标志着JVM并发模型的一次范式跃迁。其性能本质不在于单线程执行速度的提升,而在于**线程生命周期…...

基于Matlab Simulink的储能系统变换模型与钒液流电池仿真研究:功能实现及效果展示

基于Matlab/Simulink实现了以下功能,搭建了储能系统变换模型以及钒液流电池模型,仿真效果较好,系统充放电正常。 下图为系统模型图,电池输出电压电流以及SOC波形。 1.钒液流电池本体建模 2.储能变换器建模 3.双向DC变换 4.恒定功率…...

最近在折腾输电线路单相接地故障测距,发现小波变换模极大值双端行波法挺有意思。自己用Matlab/Simulink搭了个模型,今天拆开揉碎了说说实现细节

Matlab小波变换模极大值双端行波测距凯伦布尔变换输电线路单相接地故障测距Simulink模型及对应程序。 自己搭的模型,写的程序(带注释),配有对应详细算例说明,适合初学者学习。先看模型框架:双端行波法需要在…...

深入理解Kubernetes网络模型:摆脱“配置工程师”噩梦

在云原生测试领域,Kubernetes已成为基础设施的核心载体。然而,网络配置的复杂性常使测试人员陷入“反复调参-验证失败”的循环。本文从测试视角解析Kubernetes网络模型,提供可落地的验证方法论,帮助测试工程师突破网络瓶颈&#x…...

边缘计算与AI推理:在终端设备上部署模型的挑战

边缘AI部署的测试价值重构随着AI推理任务从云端下沉至终端设备,软件测试的战场正经历根本性变革。边缘计算通过将模型部署于摄像头、工业传感器、车载终端等设备,实现了毫秒级响应的实时决策能力。据行业预测,2026年全球边缘AI设备市场规模将…...

喔去,litellm 竟然被投毒了,赶紧检查你的机器中招了没有送

一、什么是setuptools? setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你: 定义 Python 包的元数据(如名称、版本、作者等)。 声明包的依赖项,确保你的包能够正确运行。 构建源代码分发包&…...

C 标准库 - `<ctype.h>`

C 标准库 - <ctype.h> 概述 在C语言编程中,字符处理是基础且常见的需求。《ctype.h》是C标准库中的一个头文件,提供了丰富的字符处理函数。这些函数用于检测字符的类型(如字母、数字、空白字符等),以及转换字符的大小写。本篇文章将详细介绍 <ctype.h> 头文…...

API 类别 - UI 核心

API 类别 - UI 核心 引言 在数字化时代,用户界面(UI)设计在软件和网站开发中扮演着至关重要的角色。一个直观、易用的UI设计能够显著提升用户体验,进而提高产品的市场竞争力。API类别中的UI核心,作为连接前后端的关键桥梁,承载着实现UI功能与交互的重任。本文将深入探讨…...

小白友好:Local SDXL-Turbo极简使用教程,开箱即用无需复杂配置

小白友好&#xff1a;Local SDXL-Turbo极简使用教程&#xff0c;开箱即用无需复杂配置 1. 什么是Local SDXL-Turbo&#xff1f; Local SDXL-Turbo是一款革命性的AI绘画工具&#xff0c;它让"打字即出图"成为现实。不同于传统AI绘画需要等待几秒甚至几分钟&#xff…...