数据库系统实现技术

数据库系统实现技术

1、数据库管理系统概述
(1)DBMS的基本功能:a. 数据库定义功能(DDL):外模式、模式、内模式、完整性、安全保
密、索引、视图定义,定义存储在数据字典(系统目录),是DBMS运行的基本依据。
b. 数据操纵功能(DML):检索、插入、更新和删除操作。
c.数据存储和管理:
d.事务管理:并发和故障恢复。
e. 通信功能和数据转换功能等
(2)DBMS的程序模块:数据定义模块、数据操纵模块、数据库运行管理模块、数据库组织、存储
和管理模块、数据库建立、维护和其他方面模块。
(3)DBMS的层次结构:最上层是应用层位于DBMS核心之外。
(2)第二层是语言翻译处理层它处理的对象是数据库语言 SQL,
(3)第三层是数据存取层:该层处理的对象是单个元组。
(4)第四层是数据存储层。该层处理的对象是数据页和系统缓冲区。
(5)操作系统是DBMS的基础。提供的存取原语和基本的存取方法通常作为与DBMS存储层的接口。它
处理的对象是数据文件的物理块。

2、数据库管理系统的主要成分:
三个主要成分:存储管理器(负责外存和内存缓冲区管理)、查询处理器(DDL编译、安全定义和
查询、完整定义和控制、查询编译优化和执行)、事务管理器(ACID特性,事务管理、并发控制、日志管理和故障恢复)
存储管理器重要模块:存储管理、缓冲区管理、索引/文件/记录管理器
查询处理器重要模块:DDL编译器、查询编译器、执行引擎
事务管理器重要模块:事务管理、日志和恢复、并发控制。
缓冲区和锁表是DBMS管理的重要内存结构。
(1)存储管理器:负责管理的数据包括:目标数据、元数据、索引和日志等。
a.物理存储介质层次:高速缓冲存储器、主存储器、第二级存储器、第三级存储器,依次访问速度
降低,价格也降低。
其中高速缓冲存储器、主存储器为基本存储(易失性存储),第二级存储器(例如磁盘)称为辅助存
储器或联机存储器,第三级存储器(如磁带、光盘机)也叫脱机存储器。第二级和第三级存储器为
外存。
磁盘块为磁盘空间分配的基本单位,也是磁盘与主存传输数据的逻辑单元。
b. 数据组织: 一个数据库映为多个不同文件, 为了将不同大小记录组织在同一个磁盘块中,常采
用分槽的页结构,即块开始有块头(包括块中记录个数、块中空闲空间尾指针、记录的位置和大小
的数组)、中间为空闲区、尾部为分配的记录。
C. 缓冲区管理:缓冲区替换策略(最近最少使用LRU,先进先出FIFO、时钟算法、系统控制法等.
d.数据字典:存储关于数据库的描述信息。必须存储的目录信息包括:关系基本信息、用户信息、
索引信息和统计信息。
e. 索引结构:支持对所要求的数据进行快速定位的附加数据结构称为索引。
一个文件可以有多个索引,一个索引包括一个属性和多个属性(查找码或搜索码),以及对应记录
的位置。
顺序索引:查找码按顺序存储如B+树索引,在顺序索引中,如果对应的记录也按查找码排列,则称
为聚集索引(主索引)。
对单个关系中元组的查询可分为点查询和范围查询:
点查询:查询特定属性上指定值的元组,一般为查询结果为单个记录 比如 select * from 
student from s#=001’
范围查询:查询给定属性值在指定范围的所有元组,一般查询结果为多个记录 select * from 
student from s# between ‘001’ and ‘009’
顺序索引支持点查询和范围查询,散列索引支持点查询,不支持范围查询(注意)
(2) 查询处理: 查询处理器最主要的模块查询编译器和查询执行引擎.
a.查询处理过程:分析查询语句语法(生成语法分析树,翻译为关系表达式,形成初始查询计划)、选择逻辑查询计划(生成逻辑查询计划树或扩展的关系代数表达式)、选择物理查询计划
(生成物理查询计划树)、查询执行。
逻辑查询选择:初始查个询计划转化为一个预期执行执行时间较小的等价计划过程。
b.选择逻辑查询计划和选择物理查询计划的步骤通称为查询优化。
物理查询计划选择常采用基于代价的查询计划选择方法(根据选定的逻辑查询计划派生多个不同物
理查询计划,并选择代价最小或接近最小的物理查询计划)。
关系代数表达式等价:选择运算对并、交、差具有分配律:
σP(E1 ∪ E2)=σP(E1)∪ σP(E2) σP(E1 ∩ E2)=σP(E1)∩ σP(E2)
σP(E1 - E2)=σP(E1)- σP(E2)
投影对并运算分配律:∏L(E1 ∪ E2)=L(E1) ∪ ∏L(E2)
c.查询执行:查询执行的最基本动作是关系运算的执行。选择运算的两种实现方式:全表扫描(依
次访问表中的每一块),索引扫描。
(3)事务管理
a.事务的概念:数据库的一些操作的集合通常是一个独立单元,这种具有独立性的逻辑单元即是事
务
b.事务的特性:
1)原子性(Atomicity )。事务的所有操作在数据库中是不可分割的,或全部反映出来或全部不反
映。
2)一致性( Consistency)。事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致
性状态。即数据库中只包含成功事务提交的结果。
3)隔离性(Isolation)。事务的执行不能被其他事务所干扰,一个事务内部的操作及使用的数据对
其他并发事务是隔离的,互不影响。
4)持久性(Durability)。事务一旦提交并执行后,它对数据库中数据的改变是永久的。
事务特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(durability)。
原子性、持久性:事务管理器中故障恢复机制责任。一致性:应用程序员的责任。隔离性:事务管
理器中并发控制部件责任。
(4)事务的并发控制
a.事务的并发执行
并发执行时可能会破坏数据库的一致性,主要问题包括以下三方面:
1)丢失更新。 2)对未提交更新的依赖。(读脏数据) 3)不一致的分析。(不可重复读)
b.并发事务的调度
如果多个事务在某个调度下的执行结果与这些事务在某个串行调度下的执行结果相同,则称这个调
度为可串行化的调度。若用等价的概念来表示就是指某个调度等价于一个串行调度。
可串行化是多个事务并发执行的正确性准则。
事务的可恢复调度:对于每对事务TiTj,如果Tj读取了Ti所写的数据,则Ti先于Tj提交。
级联回滚:一个事务导致依赖它的一系列事务回滚的现象。
无级联回滚(调度):由于级联回滚导致大量工作撤销,所以对调度加以限制,避免级联回滚发
生,这样的调度为无级联调度。
可串行化且无级联(可恢复)调度保证数据库一致性,是我们所需要的。
(5.封锁
在事务的并发执行过程中为保证数据库的一致性,常采用封锁的方法来限制其他事务对该事务数据
项的访问。对数据项加锁的方式主要有两种。
1)共享锁。如果事务T获得了数据项Q上的共享型锁(记为S),则Ti可读Q但不能写e。
2)排他锁。如果事务Ti获得了数据项Q上的排他型锁(记为X),则T既可读Q又可写Q。
注意:加了共享锁的数据项可以再加共享锁,不能加排他锁。
加了排他锁的数据项不能再加共享锁和排他锁。
简言之:共享锁与共享锁相容,与排他锁不相容
排他锁与任何锁不相容。
两阶段封锁协议保证可串行性,它要求每个事务分两个阶段提出加锁和解锁申请。可保证可串行
化。
1)增长阶段。事务可以获得锁,但不能释放锁。
2)缩减阶段。事务可以释放锁,但不能获得新锁。
两阶段封锁增强协议:严格两阶段封锁协议和强两阶段封锁协议
严格两阶段封锁协议:在遵循两阶段封锁协议下,要求事务的排他锁在事务提交后才能释放。
强两阶段封锁协议:在遵循两阶段封锁协议下,要求事务的所有锁在事务提交前不能释放。
两阶段封锁协议不能保证死锁发生。
(6)故障恢复
a.故障的类型
1)事务故障可分为逻辑错误和系统错误,它们都可能造成事务执行失败。事务没有达到预期的终
点。
2)系统故障:硬件故障或者是数据库软件或操作系统的错误,致使系统停止运行。主存储器内容丢
失,而外存储器完好无损。
3)磁盘故障。数据传送操作过程中由于磁头损坏或故障而造成的数据内容丢失。
b.基于日志的恢复
日志包括事务开始日志记录、更新日志记录、事务提交日志记录和事务终止日志记录。
登记日志记录原则:先写日志原则
发生事务故障后,事务故障恢复的步骤如下:
(1)反向扫描日志,查找该事务的更新记录C
(2)对事务的更新操作执行逆操作,将日志记录中的“改前值”写人数据库。
(3)反复进行直到恢复到该事务的开始日志,则事务故障恢复结束。
对于系统的故障恢复步骤如下:
(1)正向扫描日志文件,将在故障发生前提交的事务的标识记入REDO队列;将故障发生时尚未完成
的事务的标识记人UNDO队列。
(2)对UNDO队列中的事务进行反向扫描,执行逆操作。
(3)对REDO队列中的事务进行正向扫描,重新执行日志记录登记操作。
介质故障恢复:系统备份后,装入后备副本和日志副本,由系统恢复。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
作者: Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom 本书是斯坦福大学计算机科学专业数据库系列课程第二门课的教科书。书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分—存储管理器、查询处理器和事务管理器的实现技术。书中还对信息集成的最新技术,例如数据仓库、OLAP、数据挖掘、Mediator、数据立方体系统等进行了介绍。本书适合于作为高等院校计算机专业研究生的教材或本科生的教学参考书,也适合作为从事相关研究或开发工作的专业技术人员的高级参考资料 译者序 前言 第1章 DBMS实现概述 1.1 Megatr on 2000数据库系统介绍 1.1.1 Megatr on 2000实现细节 1.1.2 Megatron 2000如何执行查询 1.1.3 Megatron 2000有什么问题 1.2 数据库管理系统概述 1.2.1 数据定义语言命令 1.2.2 查询处理概述 1.2.3 主存缓冲区和缓冲区管理器 1.2.4 事务处理 1.2.5 查询处理器 1.3 本书梗概 1.3.1 预备知识 1.3.2 存储管理概述 1.3.3 查询处理概述 1.3.4 事务处理概述 1.3.5 信息集成概述 1.4 数据库模型和语言回顾 1.4.1 关系模型回顾 1.4.2 SQL回顾 1.4.3 关系的和面向对象的数据 1.5 小结 1.6 参考文献 第2章 数据存储 2.1 存储器层次 2.1.1 高速缓冲存储器 2.1.2 主存储器 2.1.3 虚拟存储器 2.1.4 第二级存储器 2.1.5 第三级存储器 2.1.6 易失和非易失存储器 习题 2.2 磁盘 2.2.1 磁盘结构 2.2.2 磁盘控制器 2.2.3 磁盘存储特性 2.2.4 磁盘访问特性 2.2.5 块的写入 2.2.6 块的修改 习题 2.3 辅助存储器的有效使用 2.3.1 计算的I/O模型 2.3.2 辅助存储器中的数据排序 2.3.3 归并排序 2.3.4 两阶段多路归并排序 2.3.5 扩展多路归并以排序更大的关系 习题 2.4 改善辅助存储器的访问时间 2.4.1 按柱面组织数据 2.4.2 使用多个磁盘 2.4.3 磁盘镜像 2.4.4 磁盘调度和电梯算法 2.4.5 预取和大规模缓冲 2.4.6 各种策略及其优缺点 习题 2.5 磁盘故障 2.5.1间断性故障 2.5.2 校验和 2.5.3 稳定存储 2.5.4 稳定存储的错误处理能力 习题 2.6 从磁盘崩溃中恢复 2.6.1 磁盘的故障模型 2.6.2 作为冗余技术的镜像 2.6.3 奇偶块 2.6.4 一种改进:RAID 2.6.5 多个盘崩溃时的处理 习题 2.7 小结 2.8 参考文献 第3章 数据元素的表示 3.1 数据元素和字段 3.1.1 关系型数据库元素的表示 3.1.2 对象的表示 3.1.3 数据元素的表示 3.2 记录 3.2.1 定长记录的构造 3.2.2 记录首部 3.2.3 定长记录在块中的放置 习题 3.3 块和记录地址的表示 3.3.1 客户机-服务器系统 3.3.2 逻辑地址和结构地址 3.3.3 指针混写 3.3.4 块返回磁盘 3.3.5 被固定的记录和块 习题 3.4 变长数据和记录 3.4.1 具有变长字段的记录 3.4.2 具有重复字段的记录 3.4.3 变格式的记录 3.4.4 不能装入一个块中的记录 3.4.5 BLOBS 习题 3.5 记录的修改 3.5.1 插入 3.5.2 删除 3.5.3 修改 习题 3.6 小结 3.7 参考文献 第4章 索引结构 4.1 顺序文件上的索引 4.1.1 顺序文件 4.1.2 稠密索引 4.1.3 稀疏索引 4.1.4 多级索引 4.1.5 重复键的索引 4.1.6 数据修改期间的索引维护 习题 4.2 辅助索引 4.2.1 辅助索引的设计 4.2.2 辅助索引的应用 4.2.3 辅助索引中的间接 4.2.4 文档检索和倒排索引 习题 4.3 B树 4.3.1 B树的结构 4.3.2 B树的应用 4.3.3 B树中的查找 4.3.4 范围查询 4.3.5 B树的插入 4.3.6 B树的删除 4.3.7 B树的效率 习题 4.4 散列表 4.4.1 辅存散列表 4.4.2 散列表的插入 4.4.3 散列表的删除 4.4.4 散列表索引的效率 4.4.5 可扩展散列表 4.4.6 可扩展散列表的插入 4.4.7 线性散列表 4.4.8 线性散列表的插入 习题 4.5 小结 4.6 参考文献 第5章 多维索引 5.1 需要多维的应用 5.1.1 地理信息系统 5.1.2 数据立方体 5.1.3 SQL多维查询 5.1.4 使用传统索引执行范围查询 5.1.5 利用传统索引执行最邻近查询 5.1.6 传统索引的其他限制 5.1.7 多维索引结构综述 习题 5.2 多维数据的类散列结构 5.2.1 网格文件 5.2.2 网格文件的查找 5.2.3 网格文件的插入 5.2.4 网格文件的性能 5.2.5 分段散列函数 5.2.6 网格文件和分段散列的比较 习题 5.3 多维数据的类树结构 5.3.1 多键索引 5.3.2 多键索引的性能 5.3.3 kd树 5.3.4 kd树的操作 5.3.5 使kd树适合辅存 5.3.6 四叉树 5.3.7 R树 5.3.8 R树的操作 习题 5.4 位图索引 5.4.1 位图索引的诱因 5.4.2 压缩位图 5.4.3 游程长度编码位向量的操作 5.4.4 位图索引的管理 习题 5.5 小结 5.6 参考文献 第6章 查询执行 6.1 一种查询代数 6.1.1 并、交和差 6.1.2 选择操作符 6.1.3 投影操作符 6.1.4 关系的积 6.1.5 连接 6.1.6 消除重复 6.1.7 分组和聚集 6.1.8 排序操作符 6.1.9 表达式树 习题 6.2 物理查询计划操作符介绍 6.2.1 扫描表 6.2.2 扫描表时的排序 6.2.3 物理操作符计算模型 6.2.4 衡量代价的参数 6.2.5 扫描操作符的I/O 代价 6.2.6 实现物理操作符的迭代器 6.3 数据库操作的一趟算法 6.3.1 一次多元组操作的一趟算法 6.3.2 全关系的一元操作的一趟算法 6.3.3 二元操作的一趟算法 习题 6.4 嵌套循环连接 6.4.1 基于元组的嵌套循环连接 6.4.2 基于元组的嵌套循环连接的迭代器 6.4.3 基于块的嵌套循环连接算法 6.4.4 嵌套循环连接的分析 6.4.5 迄今为止的算法的小结 习题 6.5 基于排序的两趟算法 6.5.1 利用排序去除重复 6.5.2 利用排序进行分组和聚集 6.5.3 基于排序的并算法 6.5.4 基于排序的交和差算法 6.5.5 基于排序的一个简单的连接算法 6.5.6 简单排序连接的分析 6.5.7 一种更有效的基于排序的连接 6.5.8 基于排序的算法小结 习题 6.6 基于散列的两趟算法 6.6.1 通过散列划分关系 6.6.2 基于散列的消除重复算法 6.6.3 基于散列的分组和聚集算法 6.6.4 基于散列的并、交、差算法 6.6.5 散列连接算法 6.6.6 节省一些磁盘I/O 6.6.7 基于散列的算法小结 习题 6.7 基于索引的算法 6.7.1 聚簇和非聚簇索引 6.7.2 基于索引的选择 6.7.3 使用索引的连接 6.7.4 使用有排序索引的连接 习题 6.8 缓冲区管理 6.8.1 缓冲区管理结构 6.8.2 缓冲区管理策略 6.8.3 物理操作符选择和缓冲区管理的关系 习题 6.9 使用超过两趟的算法 6.9.1 基于排序的多趟算法 6.9.2 基于排序的多趟算法的性能 6.9.3 基于散列的多趟算法 6.9.4 基于散列的多趟算法的性能 习题 6.10 关系操作的并行算法 6.10.1 并行模型 6.10.2 一次一个元组的并行操作 6.10.3 全关系操作的并行算法 6.10.4 并行算法的性能 习题 6.10 小结 6.11 参考文献 第7章 查询编译器 7.1 语法分析 7.1.1 语法分析与语法分析树 7.1.2 SQL的一个简单子集的语法 7.1.3 预处理器 习题 7.2 用于改进查询计划的代数定律 7.2.1 交换律与结合律 7.2.2 涉及选择的定律 7.2.3 下推选择 7.2.4 涉及投影的定律 7.2.5 有关连接与积的定律 7.2.6 有关重复消除的定律 7.2.7 涉及分组与聚集的定律 习题 7.3 从语法分析树到逻辑查询计划 7.3.1 转换成关系代数 7.3.2 从条件中去除子查询 7.3.3 逻辑查询计划的改进 7.3.4 结合/分配运算符的分组 习题 7.4 操作代价的估计 7.4.1 中间关系大小的估计 7.4.2 投影大小的估计 7.4.3 选择大小的估计 7.4.4 连接大小的估计 7.4.5 多连接属性的自然连接 7.4.6 多个关系的连接 7.4.7 其他操作的大小估计 习题 7.5 基于代价的计划选择介绍 7.5.1 大小参数估计值的获取 7.5.2 统计量的增量计算 7.5.3 减少逻辑查询计划代价的启发式 7.5.4 枚举物理计划的方法 习题 7.6 连接顺序的选择 7.6.1 连接的左右变元的意义 7.6.2 连接树 7.6.3 左深连接树 7.6.4 通过动态编程来选择连接顺序和分组 7.6.5 带有更具体的代价函数的动态编程 7.6.6 选择连接顺序的贪婪算法 习题 7.7 物理查询计划选择的完成 7.7.1 选取选择方法 7.7.2 选取连接方法 7.7.3 流水线操作与物化 7.7.4 一元流水线操作 7.7.5 二元流水线操作 7.7.6 物理查询计划的符号 7.7.7 物理操作的顺序 习题 7.8 小结 7.9 参考文献 第8章 系统故障对策 8.1 可回复操作的问题和模型 8.1.1 故障模式 8.1.2 关于事务的进一步讨论 8.1.3 事务的正确执行 8.1.4 事务的原语操作 习题 8.2 undo日志 8.2.1 日志记录 8.2.2 undo日志规则 8.2.3 使用undo日志的恢复 8.2.4 检查点 8.2.5 非静止检查点 习题 8.3 redo日志 8.3.1 redo日志规则 8.3.2 使用redo日志的恢复 8.3.3 redo日志的检查点 8.3.4 使用带检查点的redo日志的恢复 习题 8.4 undo/redo日志 8.4.1 undo/redo规则 8.4.2 使用undo/redo日志的恢复 8.4.3 undo/redo日志的检查点 习题 8.5 防备介质故障 8.5.1 备份 8.5.2 非静止转储 8.5.3 使用备份和日志的恢复 习题 8.6 小结 8.7 参考文献 第9章 并发控制 9.1 串行调度和可串行化调度 9.1.1 调度 9.1.2 串行调度 9.1.3 可串行化调度 9.1.4 事务语义的影响 9.1.5 事务和调度的一种记法 习题 9.2 冲突可串行性 9.2.1 冲突 9.2.2 优先图及冲突可串行性判断 9.2.3 优先图测试发挥作用的原因 习题 9.3 使用锁的可串行性实现 9.3.1 锁 9.3.2 封锁调度器 9.3.3 两阶段封锁 9.3.4 两阶段封锁发挥作用的原因 习题 9.4 用多种锁方式的封锁系统 9.4.1 共享锁与排他锁 9.4.2 相容性矩阵 9.4.3 锁的升级 9.4.4 更新锁 9.4.5 增量锁 习题 9.5 封锁调度器的一种体系结构 9.5.1 插入锁动作的调度器 9.5.2 锁表 习题 9.6 数据库元素层次的管理 9.6.1 多粒度的锁 9.6.2 警示锁 9.6.3 幻象与插入的正确处理 习题 9.7 树协议 9.7.1 基于树的封锁的动机 9.7.2 访问树结构数据的规则 9.7.3 树协议发挥作用的原因 习题 9.8 使用时间戳的并发控制 9.8.1 时间戳 9.8.2 物理上不可实现的行为 9.8.3 脏数据的问题 9.8.4 基于时间戳调度的规则 9.8.5 多版本时间戳 9.8.6 时间戳与封锁 习题 9.9 使用有效性确认的并发控制 9.9.1 基于有效性确认的调度器的结构 9.9.2 有效性确认规则 9.9.3 三种并发控制机制的比较 习题 9.10 小结 9.11 参考文献 第10章 再论事务管理 10.1 读未提交数据的事务 10.1.1 脏数据问题 10.1.2 级联回滚 10.1.3 回滚的管理 10.1.4 成组提交 10.1.5 逻辑日志 习题 10.2 视图可串行性 10.2.1 视图等价性 10.2.2 多重图与视图可串行性的判断 10.2.3 视图可串行性的判断 习题 10.3 死锁处理 10.3.1 超时死锁检测 10.3.2 等待图 10.3.3 通过元素排序预防死锁 10.3.4 时间戳死锁检测 10.3.5 死锁管理方法的比较 习题 10.4 分布式数据库 10.4.1 数据的分布 10.4.2 分布式事务 10.4.3 数据复制 10.4.4 分布式查询优化 习题 10.5 分布式提交 10.5.1 分布式原子性的支持 10.5.2 两阶段提交 10.5.3 分布式事务的恢复 习题 10.6 分布式封锁 10.6.1 集中封锁系统 10.6.2 分布式封锁算法的代价模型 10.6.3 封锁多副本的元素 10.6.4 主副本封锁 10.6.5 局部锁构成的全局锁 习题 10.7 长事务 10.7.1 长事务的问题 10.7.2 saga(系列记载) 10.7.3 补偿事务 10.7.4 补偿事务发挥作用的原因 习题 10.8 小结 10.9 参考文献 第11章 信息集成 11.1 信息集成的方式 11.1.1 信息集成的问题 11.1.2 联邦数据库系统 11.1.3 数据仓库 11.1.4 Mediator 习题 11.2 基于Mediator系统的包装器 11.2.1 查询模式的模板 11.2.2 包装器生成器 11.2.3 过滤器 11.2.4 其他在包装器上进行的操作 习题 11.3 联机分析处理 11.3.1 OLAP应用 11.3.2 OLAP数据的多维视图 11.3.3 星型模式 11.3.4 切片和切块 习题 11.4 数据立方体 11.4.1 立方体操作符 11.4.2 通过物化视图实现立方体 11.4.3 视图的格 习题 11.5 数据挖掘 11.5.1 数据挖掘的应用 11.5.2 关联规则的挖掘 11.5.3 A-Priori算法 11.6 小结 11.7 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CaoPengCheng&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值