当前位置:首页>Linux>你的数据湖为什么总在"裸奔"?这个Linux基金会提出的数据中台给10亿行数据上ACID事务锁

你的数据湖为什么总在"裸奔"?这个Linux基金会提出的数据中台给10亿行数据上ACID事务锁

  • 2026-02-28 01:11:53
你的数据湖为什么总在"裸奔"?这个Linux基金会提出的数据中台给10亿行数据上ACID事务锁

每年因数据湖并发写入冲突导致的线上事故,在各大厂的复盘文档里从未缺席。今天我们撕开 Delta Lake 的源码,看看这个 GitHub 8.6K Star 的项目,到底是怎么在"一堆文件"上硬生生实现数据库级别的事务保障的。

Delta Lake Logo

一、灵魂拷问:你的数据湖"可靠"吗?

先来个灵魂拷问。如果你的团队正在用 HDFS / S3 做数据湖,你敢说以下场景不会出问题吗?

场景一:凌晨3点,两个 Spark 任务同时写同一张表。 任务 A 刚写了一半 Parquet 文件,任务 B 读到了这些不完整的数据,下游报表直接炸了。

场景二:上线前误跑了一个 DELETE 脚本。 生产表里 300 万条核心数据没了,没有事务回滚,只能从备份恢复——如果你有备份的话。

场景三:每小时一个微批,跑着跑着目录里攒了 50 万个小文件。 查询性能断崖式下降,list 操作就要 10 分钟。

场景四:上游悄悄改了个字段类型。 你的 ETL Pipeline 静默地写入了脏数据,一周后才被 BI 同学发现。

这些不是假设,是数据工程团队每天都在经历的真实痛点。

而 Delta Lake 给出的答案是:在文件系统之上,用一套事务日志协议,硬生生造出数据库级别的 ACID 事务。                                                                         

项目信息卡

  • 🔗 仓库地址:https://github.com/delta-io/delta
  • ⭐ Star 数:8.6K  |  🍴 Fork 数:2K  |  👥 贡献者:417+
  • 📝 语言:Scala 78.6% + Java 18.4% + Python 2.6%
  • 📜 协议:Apache 2.0(Linux 基金会项目)
  • 🏢 贡献组织:Adobe、Apple、Amazon、Microsoft、阿里巴巴、字节跳动等 70+ 家

二、架构全景:四层设计,一张图看懂

直接看源码中 build.sbt 的模块定义,Delta Lake 采用了清晰的四层架构:

这四层各司其职:

层级
职责
核心源码模块
应用层
SQL/DataFrame/Streaming API
python/
、用户代码
引擎集成层
各引擎的读写适配
spark/
flink/spark-connect/
Kernel 核心层
引擎无关的 Delta 协议实现
kernel/kernel-api/
kernel/kernel-defaults/
存储层
事务日志的原子性读写保证
storage/

💡 关键设计决策:4.0 版本引入的 Delta Kernel 是重大架构升级——将核心协议逻辑从 Spark 中彻底解耦,让任何引擎只需实现一个 Engine 接口就能原生读写 Delta 表。


三、核心机密:事务日志——在文件上造"数据库"

3.1 _delta_log/ 目录:一切的起点

打开任何一个 Delta 表的存储路径,你都会看到一个 _delta_log/ 目录。这就是 Delta 的"大脑"——所有的表状态变更都记录在这里

每个 JSON 文件就是一次"提交"(commit),包含了一系列 Action。源码中(spark/src/main/scala/org/apache/spark/sql/delta/actions/actions.scala)定义了这些核心类型:

// 所有表状态变更的基类sealed trait Action{def wrapSingleActiondef jsonString = JsonUtils.toJson(wrap)}// 协议版本——控制向前/向后兼容case class Protocol(minReaderVersion: Int, minWriterVersion: Int, ...)// 表元数据——Schema、分区列、表属性case class Metadata(id: String, schemaString: String, partitionColumns: Seq[String], ...)// 新增文件——记录数据文件的路径、大小、分区值case class AddFile(path: String, partitionValues: Map[StringString], size: Long, ...)// 删除文件——逻辑删除(物理文件还在,等 VACUUM 清理)case class RemoveFile(path: String, deletionTimestamp: Option[Long], ...)

这个设计的精妙之处在于:数据文件本身是不可变的 Parquet 文件,所有的"增删改"都只是在事务日志里追加新的 Action。DELETE 不会真的删文件,UPDATE 是"删旧文件 + 加新文件"。

3.2 读取一张表 = 重放日志 + 过滤

当你执行 spark.read.format("delta").load("/data/my_table"),底层做了什么?

  1. 找到最近的 Checkpoint_last_checkpoint 文件指向 v3)
  2. 读取 Checkpoint(v3.checkpoint.parquet —— 包含 v0~v3 的合并状态)
  3. 重放后续的 JSON 日志(v4.json、v5.json)
  4. 合并出当前存活的文件列表(所有 AddFile 减去所有 RemoveFile)
  5. 读取这些 Parquet 文件的数据

这就是源码中 SnapshotImpl 和 LogReplay 做的事情。每个 Snapshot 就是表在某个版本的"一致快照"。


四、让数据工程师夜夜安睡的秘密:OCC 并发控制

前面场景一的问题——两个任务同时写同一张表——Delta 是这么解决的:

核心实现在 OptimisticTransaction.scala。源码中的 ConflictChecker 非常聪明——它不会一刀切地拒绝所有并发写入,而是精确分析冲突范围

// ConflictChecker 记录的事务读取信息case class CurrentTransactionInfo(    val readPredicates: Vector[DeltaTableReadPredicate], // 读了哪些分区/条件    val readFiles: Set[AddFile],                          // 读了哪些文件    val readWholeTable: Boolean,                          // 是否全表扫描    val readAppIds: Set[String],                          // 幂等写入 ID    val metadata: Metadata,    val actions: Seq[Action],    ...)

只有当并发写入真正影响了当前事务读取的数据时,才会报冲突。 比如任务 A 写分区 date=2026-02-27,任务 B 写分区 date=2026-02-26,完全互不影响,自动成功。

而存储层的 LogStore 保证了最关键的三个底线(来自 storage/src/main/java/io/delta/storage/LogStore.java):

/** * 1. Atomic visibility — 文件要么完整可见,要么不可见 * 2. Mutual exclusion — 同一路径只有一个 writer 能成功 * 3. Consistent listing — 写入后的文件必须在后续 list 中出现 */public abstract class LogStore {public abstract void write(Path path, Iterator<String> actions,         Boolean overwrite, Configuration hadoopConf) throws IOException;public abstract Iterator<FileStatus> listFrom(Path path,         Configuration hadoopConf) throws IOException;}

不同存储的实现策略完全不同:HDFS 用原子重命名,S3 用条件写入(S3 没有原子 rename!),Azure 用条件 ETag,GCS 用 if-generation-match。


五、Kernel 架构:让所有引擎"说同一种话"

Delta 4.0 最大的架构变革是 Delta Kernel——一个纯 Java 的、引擎无关的核心库。

来看 kernel/kernel-api/src/main/java/io/delta/kernel/ 下的核心接口:

// 表入口 —— 一切从这里开始public interface Table {static Table forPath(Engine engine, String path);    Snapshot getLatestSnapshot(Engine engine);    TransactionBuilder createTransactionBuilder(Engine engine, String engineInfo, Operation op);void checkpoint(Engine engine, long version);}// 一致快照 —— 某个版本的不可变视图public interface Snapshot {long getVersion();    StructType getSchema();    ScanBuilder getScanBuilder();    List<String> getPartitionColumnNames();}// 读路径public interface Scan {    CloseableIterator<FilteredColumnarBatch> getScanFiles(Engine engine);    Optional<Predicate> getRemainingFilter();}// 写路径public interface Transaction {    StructType getSchema(Engine engine);    TransactionCommitResult commit(Engine engine, CloseableIterable<Row> dataActions);}

而引擎要做的,就是实现 Engine SPI 接口:

public interface Engine {    ExpressionHandler getExpressionHandler();  // 表达式求值    JsonHandler getJsonHandler();              // JSON 解析    FileSystemClient getFileSystemClient();    // 文件系统操作    ParquetHandler getParquetHandler();        // Parquet 读写}

这意味着:Flink、Trino、Presto、甚至你自己的引擎,只要实现这 4 个 Handler,就能完整地读写 Delta 表,享受所有事务保障。不再需要引入庞大的 Spark 依赖。


六、读写路径全拆解

深入源码,Delta 的读写路径设计得极其清晰:

几个值得关注的源码细节:

写路径中的 transformLogicalDataTransaction.java)——负责将用户写入的逻辑数据转换为物理数据。这一步会处理列映射(Column Mapping)、默认值填充、分区值校验等。源码中明确写道:

// 如果启用了列映射模式,当前阻止写入(列映射需要特殊处理物理列名)blockIfColumnMappingEnabled(transactionState);// 如果数据中包含 Variant 类型,当前阻止写入(实验特性)blockIfVariantDataTypeIsDefined(tableSchema);

读路径中的 transformPhysicalDataScan.java)——做了三件关键事情:

  1. 行追踪(Row Tracking):如果表开启了 Row Tracking,将物理行 ID 转换为逻辑行 ID
  2. 删除向量(Deletion Vector):用 RoaringBitmap 标记哪些行已被删除,避免读到脏数据
  3. 列映射恢复:将物理列名映射回逻辑列名

七、生产场景全覆盖:不只是"加了个事务"

7.1 流批一体:同一张表,实时写、离线读

这是 Delta Lake 最杀手级的场景。源码中的 DeltaSource(Structured Streaming Source)和 DeltaSink(Streaming Sink)实现了完整的流批一体:

流式写入,批量查询永远看到一致快照,CDC 还能捕获变更增量——一张表,三种用法

7.2 SQL DML:数据湖终于能 UPDATE 和 DELETE 了

从 commands/ 目录的源码来看,Delta 支持完整的 DML:

操作
命令类
实现原理
INSERTWriteIntoDelta
写新 Parquet + AddFile
UPDATEUpdateCommand
读旧文件 → 修改 → 写新文件 + AddFile + RemoveFile
DELETEDeleteCommand
读旧文件 → 过滤 → 写新文件(或用 Deletion Vector)
MERGE INTOMergeIntoCommand
源表和目标表 JOIN → 按条件 insert/update/delete
OPTIMIZEOptimizeTableCommand
合并小文件为大文件
VACUUMVacuumCommand
物理删除过期的 RemoveFile 文件(默认保留 7 天)
RESTORERestoreTableCommand
时间旅行回滚到历史版本
CLONECloneTableCommand
零拷贝/深拷贝克隆表

Deletion Vector 是 Delta 的重要优化:DELETE 操作不再需要重写整个 Parquet 文件,而是用 RoaringBitmap 标记被删除的行号。源码在 DeletionVectorUtils 和 DMLWithDeletionVectorsHelper 中。

7.3 时间旅行:误操作后的后悔药

-- 查看表的所有历史版本DESCRIBE HISTORY my_table;-- 查询 3 天前的数据SELECT FROM my_table TIMESTAMP AS OF '2026-02-24';-- 查询特定版本的数据SELECT FROM my_table VERSION AS OF 42;-- 回滚到上一个版本RESTORE TABLE my_table TO VERSION AS OF 41;

源码中 Table.java 定义了三种快照获取方式:

Snapshot getLatestSnapshot(Engine engine);Snapshot getSnapshotAsOfVersion(Engine engine, long versionId);Snapshot getSnapshotAsOfTimestamp(Engine engine, long millisSinceEpochUTC);

7.4 Schema 演进 & 强制执行

Delta 同时支持 Schema Enforcement(拒绝不兼容写入)和 Schema Evolution(安全地添加新列)。Protocol action 中的 minReaderVersion 和 minWriterVersion 确保只有能理解当前表特性的客户端才能读写。


八、进阶特性一览

源码中还能看到大量面向企业生产的高级特性:

特性
说明
对应源码
Deletion Vectors
用 RoaringBitmap 标记删除行,避免重写整个文件
deletionvectors/
Row Tracking
行级追踪(Row ID + Row Commit Version)
GenerateRowIDs.scala
Column Mapping
支持列重命名/删除而不重写数据
DeltaColumnMapping.scala
Iceberg 兼容(UniForm)
同一张表可被 Iceberg 客户端读取
iceberg/
IcebergCompat.scala
Hudi 兼容
同一张表可被 Hudi 客户端读取
hudi/
Delta Sharing
跨组织安全共享数据(不拷贝)
sharing/
Unity Catalog 集成
企业级元数据治理、行列级权限
kernel/unitycatalog/
Variant 类型
半结构化数据原生支持
VariantType.java
Clustered Table
自动数据布局优化
commands/optimize/

九、和竞品的关键差异

维度
Delta Lake
Apache Iceberg
Apache Hudi
起源
Databricks / Linux 基金会
Netflix / Apache
Uber / Apache
核心目标
Lakehouse 事务层
通用表格式
增量数据处理
Kotlin 依赖
Spark 原生、Kernel 解耦中
引擎无关
Spark 深度绑定
UniForm 互操作
✅ 发起者(读 Iceberg/Hudi)
仅自身格式
仅自身格式
流批一体
原生 Structured Streaming
需要额外集成
原生支持
社区规模
8.6K Star, 417 贡献者
6.8K Star
5.5K Star
生产验证
10,000+ 生产环境
广泛
广泛

Delta Lake 的独特优势在于 UniForm——你用 Delta 写入,Trino 用 Iceberg 协议读取,Hudi 客户端也能读取。一次写入,通吃所有格式。


十、写在最后

回到开头的四个场景:

  1. 并发写入冲突 → OCC 乐观并发 + ConflictChecker 精确冲突检测 ✅
  2. 误操作无法回滚 → 事务日志 + 时间旅行 + RESTORE ✅
  3. 小文件爆炸 → OPTIMIZE 自动合并 + VACUUM 空间回收 ✅
  4. Schema 漂移 → Schema Enforcement 强制校验 + Protocol 版本控制 ✅

Delta Lake 做到了一件很难的事情:在"一堆文件"上,用精巧的日志协议和乐观并发控制,实现了数据库级别的事务保障,同时保持了数据湖的开放性和低成本。

如果你的数据湖还在"裸奔",是时候给它穿上 Delta 的"铠甲"了。


📎 延伸阅读

  • Delta Lake 官方文档
  • Delta Transaction Log Protocol 规范
  • Lakehouse: A New Generation of Open Platforms(论文)
  • Delta Kernel: A Game-Changer(官方博客)

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-28 07:13:14 HTTP/2.0 GET : https://f.mffb.com.cn/a/477523.html
  2. 运行时间 : 0.274785s [ 吞吐率:3.64req/s ] 内存消耗:4,463.27kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b12a0d247c3250cafbaf85e28252a9db
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001067s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001564s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003351s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.022023s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001511s ]
  6. SELECT * FROM `set` [ RunTime:0.003890s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001417s ]
  8. SELECT * FROM `article` WHERE `id` = 477523 LIMIT 1 [ RunTime:0.026084s ]
  9. UPDATE `article` SET `lasttime` = 1772233994 WHERE `id` = 477523 [ RunTime:0.010747s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.016111s ]
  11. SELECT * FROM `article` WHERE `id` < 477523 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006849s ]
  12. SELECT * FROM `article` WHERE `id` > 477523 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001279s ]
  13. SELECT * FROM `article` WHERE `id` < 477523 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.005202s ]
  14. SELECT * FROM `article` WHERE `id` < 477523 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007826s ]
  15. SELECT * FROM `article` WHERE `id` < 477523 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003913s ]
0.278888s