当前位置:首页>下载方法>量化平台数据管理方案:期货历史数据下载与存储实战(含源代码)

量化平台数据管理方案:期货历史数据下载与存储实战(含源代码)

  • 2026-02-04 19:26:40
量化平台数据管理方案:期货历史数据下载与存储实战(含源代码)

2026年1月23日,天勤量化正式上线非价量数据接口,为基本面量化打开新维度。但海量数据如何高效管理?本文为你构建完整的企业级数据管理方案,从下载到存储,从清洗到更新,一站式解决量化数据难题。

引言:当量化遇上数据洪流

在量化交易的世界里,数据就是燃料。但随着策略复杂度提升,我们需要的数据类型也越来越多:

  1. 价量数据
    :K线、Tick行情
  2. 基本面数据
    :库存、基差、PMI等宏观数据
  3. 衍生数据
    :技术指标、因子矩阵

特别是天勤SDK最新推出的query_edb_data接口,让我们可以获取非价量数据,为基本面量化策略提供了官方支持。但随之而来的挑战是:

  • 如何高效下载海量历史数据?
  • 如何选择合适的存储格式?
  • 如何保证数据质量和一致性?
  • 如何实现增量更新和版本管理?

本文将基于天勤SDK,构建一个完整的企业级数据管理工具,解决量化交易中的数据管理痛点。

一、数据管理工具设计架构

1.1 核心需求分析

一个完整的数据管理工具需要满足以下需求:

表格

需求类别
具体需求
解决方案
数据获取
支持K线、Tick、EDB数据下载
封装天勤SDK API
存储格式
多种格式支持,适应不同场景
CSV、Parquet、HDF5、Feather、Pickle
数据质量
缺失值检测、异常值处理、一致性检查
自动化质量报告
增量更新
只下载新数据,合并历史数据
时间戳比对、增量合并
缓存机制
避免重复下载,提升效率
本地缓存系统
元数据管理
数据版本、来源、质量信息记录
JSON元数据文件

1.2 系统架构设计

我们的数据管理工具采用分层架构:

┌─────────────────────────────────────┐│         应用层 (Application)         │├─────────────────────────────────────┤│ 数据下载 │ 数据保存 │ 质量检查 │ 增量更新 │├─────────────────────────────────────┤│         服务层 (Service)             │├─────────────────────────────────────┤│  K线服务 │ Tick服务 │ EDB服务 │ 缓存服务 │├─────────────────────────────────────┤│         数据层 (Data)                │├─────────────────────────────────────┤│  CSV │ Parquet │ HDF5 │ Feather │ 元数据 │└─────────────────────────────────────┘

二、核心模块实现详解

2.1 工具类初始化

完整代码位于:src/tq_data_manager.py

classTqDataManager:"""天勤SDK数据管理工具主类"""def__init__(self, data_dir:str="data",                 cache_dir:str="temp/cache",                 auth: Optional[TqAuth]=None,                 enable_cache:bool=True):"""        初始化数据管理工具        参数:        data_dir: 数据存储根目录        cache_dir: 缓存目录        auth: 天勤认证信息(可选)        enable_cache: 是否启用缓存        """        self.data_dir = data_dir        self.cache_dir = cache_dir        self.auth = auth        self.enable_cache = enable_cache# 创建目录结构        self._create_directories()# 初始化API        self.api = self._init_api()# 配置日志        self._setup_logging()# 存储格式配置        self.storage_formats ={"csv": self._save_to_csv,"parquet": self._save_to_parquet,"hdf5": self._save_to_hdf5,"feather": self._save_to_feather,"pickle": self._save_to_pickle}

2.2 数据下载模块

K线数据下载

defget_kline_data(self, symbol:str, duration_seconds:int=3600,                  start_date:str="2025-01-01",                  end_date:str="2026-01-31",                  force_download:bool=False,                  cache_key: Optional[str]=None)-> pd.DataFrame:"""    获取K线数据    参数:    symbol: 合约代码,如 "SHFE.au2506"    duration_seconds: K线周期(秒),3600=1小时,86400=日线    start_date: 开始日期    end_date: 结束日期    force_download: 是否强制重新下载    cache_key: 缓存键(可选)    返回:    K线数据的DataFrame    """# 生成缓存键if cache_key isNone:        cache_key = self._generate_cache_key("kline", symbol, duration_seconds, start_date, end_date)    cache_file = os.path.join(self.cache_dir,"kline",f"{cache_key}.parquet")# 检查缓存ifnot force_download and os.path.exists(cache_file):try:            self.logger.info(f"从缓存加载K线数据: {symbol}")            df = pd.read_parquet(cache_file)            self.logger.info(f"加载完成: {len(df)}行数据")return dfexcept Exception as e:            self.logger.warning(f"缓存加载失败: {e}")# 下载数据(使用回测模式)    backtest = TqBacktest(        start_dt=datetime.strptime(start_date,"%Y-%m-%d"),        end_dt=datetime.strptime(end_date,"%Y-%m-%d"))    api = TqApi(backtest=backtest)# 获取K线数据    klines = api.get_kline_serial(symbol, duration_seconds,2000)# 转换为DataFrame    df = pd.DataFrame({'datetime':[time_to_datetime(t)for t in klines['datetime']],'open': klines['open'].astype('float32'),'high': klines['high'].astype('float32'),'low': klines['low'].astype('float32'),'close': klines['close'].astype('float32'),'volume': klines['volume'].astype('int32'),'open_oi': klines['open_oi'].astype('int32'),'close_oi': klines['close_oi'].astype('int32')})    df.set_index('datetime', inplace=True)# 保存到缓存if self.enable_cache:        df.to_parquet(cache_file, compression='snappy')    api.close()return df

非价量数据(EDB)下载

defget_edb_data(self, indicator_id:str,                start_date:str="2025-01-01",                end_date:str="2026-01-31",                align:str="day",                fill:str="ffill")-> pd.DataFrame:"""    获取非价量数据(EDB数据)    参数:    indicator_id: 指标ID,如库存数据ID    start_date: 开始日期    end_date: 结束日期    align: 对齐方式,"day"表示按天对齐    fill: 填充方式,"ffill"表示向前填充    返回:    EDB数据的DataFrame    """# 调用天勤SDK的非价量数据接口    df = self.api.query_edb_data(        indicator_id=indicator_id,        start_dt=start_date,        end_dt=end_date,        align=align,        fill=fill)return df

2.3 存储格式选择与实现

存储格式对比

表格

格式
优点
缺点
适用场景
Parquet
列式存储,压缩率高,查询快
写入稍慢,需额外依赖
大规模数据分析
CSV
人类可读,通用性强
文件大,无类型信息
数据交换、小规模数据
HDF5
支持大数据集,可存储复杂结构
依赖特定库,兼容性差
科学计算、大规模数值数据
Feather
读写极快,内存映射
文件较大,兼容性有限
临时数据交换、快速存取
Pickle
Python原生,支持任意对象
不安全,版本依赖
Python内部数据存储

Parquet格式保存实现

def_save_to_parquet(self, df: pd.DataFrame, filepath:str, compress:bool=True):"""保存为Parquet格式"""    compression ='snappy'if compress elseNone# 优化数据类型for col in df.columns:if df[col].dtype =='float64':            df[col]= df[col].astype('float32')elif df[col].dtype =='int64':            df[col]= df[col].astype('int32')    df.to_parquet(filepath, compression=compression, index=True)

2.4 增量更新机制

defincremental_update(self, symbol:str, data_type:str="kline",                      duration_seconds:int=3600,                      storage_format:str="parquet",                      days_to_update:int=7)-> pd.DataFrame:"""    增量更新数据    参数:    symbol: 合约代码    data_type: 数据类型    duration_seconds: K线周期    storage_format: 存储格式    days_to_update: 需要更新的天数    返回:    更新后的完整数据DataFrame    """# 查找已有的数据文件    existing_file = self._find_latest_data_file(symbol, data_type, duration_seconds)if existing_file:# 加载已有数据        existing_df = self._load_data_file(existing_file, storage_format)# 确定需要更新的日期范围        last_date = existing_df.index.max()        start_date =(last_date + timedelta(days=1)).strftime("%Y-%m-%d")        end_date = datetime.now().strftime("%Y-%m-%d")# 下载新数据if start_date <= end_date:            self.logger.info(f"下载增量数据: {start_date} 至 {end_date}")if data_type =="kline":                new_df = self.get_kline_data(symbol, duration_seconds,                                            start_date, end_date,True)elif data_type =="tick":                new_df = self.get_tick_data(symbol, start_date, end_date,True)elif data_type =="edb":                new_df = self.get_edb_data(symbol, start_date, end_date)# 合并数据            combined_df = pd.concat([existing_df, new_df])# 去重(按索引)            combined_df = combined_df[~combined_df.index.duplicated(keep='last')]            combined_df.sort_index(inplace=True)# 保存合并后的数据            self.save_data(combined_df, data_type, symbol,                          duration_seconds, storage_format)return combined_df# 如果没有已有数据,下载完整数据    start_date =(datetime.now()- timedelta(days=365)).strftime("%Y-%m-%d")    end_date = datetime.now().strftime("%Y-%m-%d")if data_type =="kline":        df = self.get_kline_data(symbol, duration_seconds,                                start_date, end_date,True)elif data_type =="edb":        df = self.get_edb_data(symbol, start_date, end_date)# 保存数据    self.save_data(df, data_type, symbol, duration_seconds, storage_format)return df

2.5 数据质量检查模块

defdata_quality_report(self, df: pd.DataFrame)-> Dict:"""生成数据质量报告"""    report ={"基本信息":{"数据行数":len(df),"数据列数":len(df.columns),"时间范围":{"开始": df.index.min().strftime("%Y-%m-%d %H:%M:%S")ifnot df.empty elseNone,"结束": df.index.max().strftime("%Y-%m-%d %H:%M:%S")ifnot df.empty elseNone},"数据频率": self._detect_frequency(df)},"缺失值分析":{"总缺失值数": df.isnull().sum().sum(),"缺失值比例":f"{(df.isnull().sum().sum()/(len(df)*len(df.columns))):.2%}","各列缺失情况": df.isnull().sum().to_dict()},"异常值分析":{"离群值数量":int(outliers_count),"离群值比例":f"{(outliers_count /len(df)):.2%}","下限":float(lower_bound),"上限":float(upper_bound)}},"数据一致性":{"时间连续性": self._check_time_continuity(df),"价格合理性": self._check_price_consistency(df)}}return report

三、实战应用案例

3.1 贵金属数据管理实战

基于今日贵金属市场巨震的背景,我们构建一个黄金期货数据管理系统:

# 创建数据管理实例data_manager = TqDataManager(    data_dir="data/metals",    cache_dir="temp/metals_cache",    auth=TqAuth("your_email@example.com","your_password"))# 下载黄金期货日线数据gold_daily = data_manager.get_kline_data(    symbol="SHFE.au2506",    duration_seconds=86400,    start_date="2025-01-01",    end_date="2026-01-31")# 保存为Parquet格式saved_file = data_manager.save_data(    df=gold_daily,    data_type="kline",    symbol="SHFE.au2506",    duration_seconds=86400,    storage_format="parquet",    compress=True)# 获取库存数据(基本面数据)inventory_data = data_manager.get_edb_data(    indicator_id="au_inventory_2026",    start_date="2025-01-01",    end_date="2026-01-31")# 生成数据质量报告quality_report = data_manager.data_quality_report(gold_daily)print("黄金数据质量报告:")print(json.dumps(quality_report, indent=2, ensure_ascii=False))

3.2 多品种数据批量管理

defbatch_download_metals(manager: TqDataManager):"""批量下载贵金属数据"""    metals =[("SHFE.au2506","黄金"),("SHFE.ag2506","白银"),("SHFE.ni2506","镍")]    results ={}for symbol, name in metals:print(f"正在下载{name}数据...")# 下载日线数据        daily_data = manager.get_kline_data(            symbol=symbol,            duration_seconds=86400,            start_date="2025-01-01",            end_date="2026-01-31")# 保存数据        saved_file = manager.save_data(            df=daily_data,            data_type="kline",            symbol=symbol,            duration_seconds=86400,            storage_format="parquet")# 质量检查        quality = manager.data_quality_report(daily_data)        results[name]={"symbol": symbol,"rows":len(daily_data),"file": saved_file,"quality_score": quality["缺失值分析"]["缺失值比例"]}return results# 执行批量下载manager = TqDataManager(data_dir="data/batch_metals")results = batch_download_metals(manager)print("批量下载结果:")for metal, info in results.items():print(f"{metal}{info['rows']}行,质量分数: {info['quality_score']}")

四、存储方案优化建议

4.1 按时间分区存储

对于大规模历史数据,建议按时间分区存储:

data/├── kline/│   ├── year=2025/│   │   ├── month=01/│   │   │   ├── SHFE.au2506.parquet│   │   │   ├── SHFE.ag2506.parquet│   │   │   └── ...│   │   ├── month=02/│   │   └── ...│   └── year=2026/└── edb/    ├── inventory/    │   ├── au_inventory.parquet    │   └── ag_inventory.parquet    └── macroeconomic/        ├── pmi.parquet        └── cpi.parquet

4.2 数据压缩策略

针对不同数据类型选择合适的压缩算法:

表格

数据类型
推荐压缩算法
压缩比
速度
K线数据
Snappy
中等
极快
Tick数据
Zstandard
EDB数据
Gzip
中等

4.3 元数据管理系统

为每个数据文件保存详细的元数据:

{"data_type":"kline","symbol":"SHFE.au2506","duration_seconds":86400,"filepath":"data/kline/year=2025/month=01/SHFE.au2506.parquet","rows":253,"columns":["open","high","low","close","volume","open_oi","close_oi"],"date_range":{"start":"2025-01-01","end":"2025-01-31"},"download_time":"2026-01-31 09:30:15","file_size":245678,"checksum":"a1b2c3d4e5f67890123456789abcdef0","quality_summary":{"missing_rate":"0.12%","outlier_count":3,"time_continuity":"良好"}}

五、性能优化技巧

5.1 并行下载

对于多个品种的数据下载,可以使用并行处理:

from concurrent.futures import ThreadPoolExecutor, as_completeddefparallel_download(symbols: List[str], manager: TqDataManager)-> Dict:"""并行下载多个品种数据"""    results ={}with ThreadPoolExecutor(max_workers=4)as executor:# 提交下载任务        future_to_symbol ={            executor.submit(manager.get_kline_data, symbol,86400): symbolfor symbol in symbols}# 收集结果for future in as_completed(future_to_symbol):            symbol = future_to_symbol[future]try:                data = future.result()                results[symbol]= dataprint(f"{symbol} 下载完成: {len(data)}行")except Exception as e:print(f"{symbol} 下载失败: {e}")return results

5.2 增量更新调度

使用定时任务实现自动增量更新:

import scheduleimport timedefscheduled_incremental_update():"""定时增量更新"""    manager = TqDataManager()# 更新贵金属数据    metals =["SHFE.au2506","SHFE.ag2506","SHFE.ni2506"]for symbol in metals:try:print(f"开始增量更新 {symbol}...")            updated_data = manager.incremental_update(                symbol=symbol,                data_type="kline",                duration_seconds=86400,                days_to_update=1)print(f"{symbol} 更新完成,当前数据行数: {len(updated_data)}")except Exception as e:print(f"{symbol} 更新失败: {e}")    manager.close()# 设置定时任务schedule.every().day.at("18:00").do(scheduled_incremental_update)# 运行调度器whileTrue:    schedule.run_pending()    time.sleep(60)

六、实战思考题

  1. 数据存储优化:如果你的策略需要同时访问最近1个月的高频Tick数据和过去5年的日线数据,应该如何设计存储方案以实现最佳性能?

  2. 增量更新挑战:在增量更新过程中,如果遇到数据源的时间戳不连续或存在重叠,应该如何设计合并逻辑以保证数据的一致性?

  3. 多源数据融合:当你的策略需要融合来自天勤SDK的价量数据、Wind的基本面数据、以及自行爬取的新闻情绪数据时,如何设计统一的数据管理框架?

  4. 生产环境部署:在实盘环境中,数据管理工具需要考虑网络中断、磁盘空间不足、权限限制等实际问题,应该如何增加容错机制和监控告警?

总结:构建稳健的数据基础设施

在量化交易系统中,数据管理往往是最容易被忽视,但却是最基础、最重要的环节。一个稳健的数据基础设施能够:

  1. 提升开发效率
    :标准化数据接口,减少重复工作
  2. 保证策略质量
    :数据质量检查,避免"垃圾进,垃圾出"
  3. 支持策略演进
    :灵活的数据格式,适应不同策略需求
  4. 降低运维成本
    :自动化更新机制,减少人工干预

本文基于天勤SDK构建的数据管理工具,不仅解决了天勤数据的高效下载和存储问题,更重要的是提供了一个可扩展、可维护的数据管理框架。无论你是个人交易者还是机构团队,都可以基于此框架构建适合自己的数据管理系统。

记住:好的策略始于好的数据。在追求复杂模型和先进算法之前,先把数据管理这个基础打牢。

工具完整代码src/tq_data_manager.py

数据目录结构

  • data/kline/
     - K线数据存储
  • data/tick/
     - Tick数据存储
  • data/edb/
     - 非价量数据存储
  • data/metadata/
     - 元数据管理
  • data/logs/
     - 运行日志

运行环境:Python 3.6+,pandas, pyarrow, tqsdk 3.9.0+

注意:非价量数据接口需要天勤SDK 3.9.0及以上版本,并配置有效天勤账户。

最新文章

随机文章

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