乐于分享
好东西不私藏

Flink源码学习系列课程-04-DataStream类型体系

Flink源码学习系列课程-04-DataStream类型体系

核心文件DataStream.javaSingleOutputStreamOperator.javaKeyedStream.java

从哪里调用

上一课 execute() 讲解了惰性求值结束后的执行过程。现在我们要倒回去——在 execute() 之前,你的 flatMap()keyBy()sum() 调用到底做了什么?

这一课解决什么问题

你的 WordCount 代码里,不同方法返回了不同的类型:

DataStream<String> text = env.fromSource(...);                        // DataStreamSingleOutputStreamOperator words = text.flatMap(new Tokenizer());     // SingleOutputStreamOperatorKeyedStream<Tuple2<String, Integer>, String> keyed = ...keyBy(...);   // KeyedStreamSingleOutputStreamOperator counts = keyed.sum(1);                     // 又回到 SingleOutputStreamOperator

你注意到没有——每次调完,返回的类型都不一样。这背后是 Flink 的设计哲学:不同返回类型 = 编译期的可用方法集控制。flatMap 之后你可以设置并行度,keyBy 之后你才能调 sum/reduce/window。如果 keyBy 返回普通的 DataStream,你在编译期就会犯"在非 Keyed 流上调用 sum"的错误。

第一关:DataStream 的核心——两个 final 字段

打开 DataStream.java,跳到第 111-129 行:

@PublicpublicclassDataStream<T{protectedfinal StreamExecutionEnvironment environment;  // 环境引用protectedfinal Transformation<T> transformation;        // ★ DAG 节点的句柄publicDataStream(StreamExecutionEnvironment environment, Transformation<T> transformation){this.environment = Preconditions.checkNotNull(environment);this.transformation = Preconditions.checkNotNull(transformation);    }}

就两个字段。就这么简单。

DataStream = 壳,Transformation = 核心。 每个 DataStream 对象只是对环境引用和 Transformation 引用的封装。你调用的 flatMap()keyBy() 等方法,本质上都是在操作或创建新的 Transformation。

为什么是 final? DataStream 一旦创建,其对应的 Transformation 就不能改变了。DataStream<String> text 始终代表文件源,不管你在后面调了多少次 .flatMap()text 本身不变——.flatMap() 返回的是一个新的 DataStream 对象。这是一种不可变设计,防止你在链式调用中产生副作用。

实践环节

在 IDE 里,Ctrl/Cmd + 点击transformation 字段,看它是什么类型。你会发现它可以是 SourceTransformationOneInputTransformationReduceTransformation 等多种子类——这就是多态的核心。

第二关:getId()——DAG 节点的唯一身份证

DataStream.java 第 137-139 行:

@InternalpublicintgetId(){return transformation.getId();}

每次 flatMap() 创建新 Transformation 时,ID 由 StreamExecutionEnvironment 内的计数器自增生成。这个 ID 是整个 DAG 中节点的唯一标识,在后续的 StreamGraph、JobGraph 中一直沿用。

为什么需要 ID? 你在大图的上下文中,有 50 个节点。你需要一种方式来标识"从 Tokenizer(id=2) 到 Counter(id=4) 有一条边"。ID 就是这个引用的锚点。

第三关(关键!):SingleOutputStreamOperator——壳的升级版

打开 SingleOutputStreamOperator.java,跳到第 49-64 行:

@PublicpublicclassSingleOutputStreamOperator<TextendsDataStream<T{protectedboolean nonParallel = false;  // 强制单并行度的标记private Map<OutputTag<?>, TypeInformation<?>> requestedSideOutputs = new HashMap<>();protectedSingleOutputStreamOperator(            StreamExecutionEnvironment environment, Transformation<T> transformation){super(environment, transformation);  // 直接传给 DataStream 的构造函数    }}

继承 DataStream,没有新增核心字段——nonParallel 和 requestedSideOutputs 都是辅助性的。它的价值在于方法

方法
作用
设置到哪
.name("tokenizer")
给算子命名
transformation.setName()
.setParallelism(4)
设置并行度
transformation.setParallelism()
.uid("my-op")
设置唯一 ID(Savepoint 恢复用)
transformation.setUid()
.disableChaining()
禁止算子链
transformation.setChainingStrategy(NEVER)
.startNewChain()
从这里开始新 Chain
transformation.setChainingStrategy(HEAD)
.slotSharingGroup("g")
指定 Slot 共享组
transformation.setSlotSharingGroup()
.setBufferTimeout(100)
设置输出缓冲超时
transformation.setBufferTimeout()

所有这些方法返回 thisSingleOutputStreamOperator<T>),形成 Fluent API

text.flatMap(new Tokenizer())    .name("tokenizer")    .setParallelism(4)    .uid("tokenizer-v2");

为什么 flatMap 返回它而不是普通的 DataStream? 因为 flatMap 创建了新算子——你接下来要设置算子的名称、并行度、Chain 策略。SingleOutputStreamOperator 正是提供了这些配置方法。如果返回普通的 DataStream,你就只能在每次 flatMap 之后手动去 env 上翻找最新的 Transformation——那就太反人类了。

第四关:disableChaining 和 startNewChain——Facade 模式的优雅

SingleOutputStreamOperator.java 第 275-289 行:

@PublicEvolvingpublic SingleOutputStreamOperator<T> disableChaining(){return setChainingStrategy(ChainingStrategy.NEVER);  // ← 前后都不 Chain}@PublicEvolvingpublic SingleOutputStreamOperator<T> startNewChain(){return setChainingStrategy(ChainingStrategy.HEAD);   // ← 不和前驱 Chain,但可以和后继 Chain}

内部的 setChainingStrategy() 是 private 的——你不能直接设置任意策略。

为什么? 这是 Facade 模式:对外暴露两个语义化方法,隐藏内部 ChainingStrategy 枚举的 4 种状态(ALWAYS, NEVER, HEAD, HEAD_WITH_SOURCES)。你不知道枚举的存在,只需要知道"禁止链"和"开新链"两个概念。这降低了 API 表面的复杂度。

第五关:KeyedStream——只多了两个字段,却解锁了整个有状态世界

打开 KeyedStream.java,跳到第 94-118 行:

publicclassKeyedStream<TKEYextendsDataStream<T{privatefinal KeySelector<T, KEY> keySelector;       // ★ key 提取器privatefinal TypeInformation<KEY> keyType;           // key 的类型信息publicKeyedStream(DataStream<T> dataStream, KeySelector<T, KEY> keySelector){this(dataStream, keySelector,             TypeExtractor.getKeySelectorTypes(keySelector, dataStream.getType()));    }}

关键细节①:KeyedStream 仍然是一个 DataStream!extends DataStream<T> 意味着 transformation 字段仍然存在,指向父 DataStream 的 Transformation(即 Tokenizer 的 OneInputTransformation(id=2))。keyBy 没有创建新的 DAG 节点。

那么 keySelector 是干嘛的?

  1. 告诉下游有状态算子(sum、reduce)如何按 key 分组状态
  2. 在创建 PartitionTransformation 时,自动附加 KeyGroupStreamPartitioner
  3. 运行时,StreamTask 通过它确定当前处理的 key 属于哪个 KeyGroup

为什么 sum 返回 SingleOutputStreamOperator 而不是 KeyedStream? sum 是一个聚合操作,完成后数据已经不需要按 key 分区了。后续的 Sink 不需要状态,不需要 keyBy 的语义。返回 SingleOutputStreamOperator 限制了用户不能再调 keyBy 之后的方法,只能走普通 DataStream 的方法链——这是一种编译期的类型状态机。

DataStream → Transformation 的映射全景

用户代码创建的对象:          内部引用的 Transformation 对象:─────────────────────      ──────────────────────────────DataStream<String> text  →  SourceTransformation(id=1)  environment ✓               input: null  transformation ✓            outputType: String  ↓ text.flatMap(Tokenizer)SingleOutputStreamOperator  →  OneInputTransformation(id=2)<Tuple2<String,Integer>>       input: [SourceTransformation(id=1)]words                           operatorFactory: SimpleOperatorFactory(StreamFlatMap)  environment ✓                 outputType: Tuple2<String, Integer>  transformation ✓  ↓ words.keyBy(value -> value.f0)KeyedStream                   →  (共享同一个) OneInputTransformation(id=2)<Tuple2<String,Integer>,        keySelector 存在 KeyedStream 对象上 String>                        PartitionTransformation 还没有创建!keyed                           (只在 sum() 被调用时才创建)  keySelector ✓  ↓ keyed.sum(1)SingleOutputStreamOperator   →  ReduceTransformation(id=4)<Tuple2<String,Integer>>        (内部隐含 PartitionTransformation)counts                          input: [PartitionTransformation → id=2]                                keySelector: value -> value.f0                                operatorFactory: KeyedProcessOperator(ReduceDriver)

边界条件速查

场景
行为
DataStream(env, null)
Preconditions.checkNotNull → NPE
DataStream(null, transformation)
Preconditions.checkNotNull → NPE
disableChaining()
 在非 PhysicalTransformation 上调用
UnsupportedOperationException
同一个 OutputTag 获取两次但类型不同
UnsupportedOperationException

总结

┌──────────────────────────────────────────────────────────────────┐│  DataStream 类型体系核心要点:                                     ││                                                                   ││  1. DataStream = 壳(environment + transformation),Transformation = DAG 节点 ││  2. SingleOutputStreamOperator 增加算子配置能力(name, parallelism, chaining) ││  3. KeyedStream 增加 keySelector,解锁有状态 API(sum, reduce, window)    ││  4. 不同返回类型 = 编译期的方法集控制(类型安全的"状态机")           ││  5. KeyedStream 不创建新 Transformation——分区效果延迟到下游算子创建   ││  6. Fluent API 全部返回 this 实现链式调用                          │└──────────────────────────────────────────────────────────────────┘

下一课预告

具体追踪 flatMap() 的完整调用链——FlatMapFunction → StreamFlatMap → SimpleOperatorFactory → OneInputTransformation → 加到 env.transformations List。5 层包装,每一层都有明确的设计理由。

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