Skip to content

数据格式 ​

SQLite 数据库结构 ​

4 个独立 SQLite 文件,通过 ATTACH DATABASE 支持跨库查询。

reference.db — 静态参考数据 ​

从 CCP 官方 SDE 导入,只读:

表关键字段说明
itemtype_id, zh_name, en_name, category_id, group_id, volume, icon_id, ...物品基础信息(16 字段)
market_treenode_id, parent_id, name市场分类树
industry_system_costssolar_system_id, activity, cost_index工业系统成本指数
item_dogmatype_id, attribute_id, value物品 dogma 属性
type_materialstype_id, material_type_id, quantity矿石精炼材料表

market.db — 市场价格数据 ​

频繁覆写,~18 MB:

表字段说明
market_pricestype_id, buy_price, sell_price, buy_volume, sell_volume, fetch_time实时订单价格快照
market_volume_snapshotstype_id, volume, fetch_time成交量快照
price_historytype_id, region_id, date, average, highest, lowest, volume, order_count, fetched_at;主键 (type_id, region_id, date);另有 (region_id, date) 索引 idx_price_history_region_date(services/price_history.PRICE_HISTORY_INDEX_DDL,建表时 CREATE INDEX IF NOT EXISTS,「更新价格」的 init_db 也会建)日级成交市场历史(成交均价 + 成交量 + 订单数),是「日订单量 / 日成交量」两列与大盘指数的数据源。覆盖集 = 制造产物 ∪ 反应产物 ∪ 被当材料的 type(1646)∪ PLEX = 5554 个(2026-10 实测);请求量 = 5554 × 勾选的中心数(单中心约 4.6 分钟 @20 req/s);历史是一次拉全的(ESI 每个 type 一次给 398 天左右,不是按天攒)。⚠️ 聚合窗口是「最近 7 个日历天」(services/price_history.get_history_summary,窗口内没有记录的日子按 0 计入 —— ESI 只返回有成交的日子,取「最近 7 条」会变成「上次活跃那几天」的平均值);本地 fetched_at 也早于窗口时给 —(不知道),不拿 0 冒充。⚠️ 尾部残缺日:ESI 的历史按天逐步出,最新一两天常只有几百个 type(实测 2026-10-04 只有 434 个、前一天 2,926 个)—— services/market_index_service._last_history_day / ui_qml/bridge/market_pulse_bridge._turnover_series 都把这种日子排除在「锚点日」与「成交额环比」之外,否则广度会从 2,300+ 掉到 399、成交额假报 −83.6%。写入方有两处:services/importers/getprices.fetch_and_save_histories(「更新价格」流程,按本次勾选的贸易中心逐个拉、按 12h TTL 增量、每 (type_id, region_id) 只保留近 180 天)与 services/price_history.save_cache(价格走势图,单 type 单区域全量覆盖写)。建表 DDL 单一来源是 services/price_history.PRICE_HISTORY_DDL
global_price_dailytype_id, date, average_price, adjusted_price, fetched_at;主键 (type_id, date)全服统一价的每日快照 —— /markets/prices/ 的 average_price/adjusted_price(CCP 口径的全服价,没有区域划分)。只存没有区域成交历史的品种(当前只有 PLEX 44992:ESI 的 /markets/{rid}/history/ 对它恒返回空列表,实测 Jita/Amarr 都是空)。由「更新价格」第 1 步顺手写入(1 次请求已经拉过,只写 1 行/天);它是大盘 PLEX 锚的数据源,口径与另外四条指数的区域成交均价不同,UI 上必须标出来。DDL 单一来源 services/importers/getprices.GLOBAL_PRICE_DDL

blueprint.db — 蓝图数据 ​

从 SDE 导入,只读:

表说明
blueprint_activities蓝图活动信息(manufacturing/invention/copying 等)
blueprint_materials蓝图材料清单(含数量和 ME 信息)
blueprint_products蓝图产出(物品 ID、产出数量)
blueprint_skills蓝图所需技能

user.db — 用户数据 ​

增删改,随使用增长:

表说明
hangars机库定义(名称/星系/设施类型/设施税/改件)
inventory_items库存物品(type_id, 数量, 加权平均成本)
user_blueprints用户蓝图(BPO/BPC, ME/TE, runs, quantity)。不变量:is_bpo=1(原图)⇒ runs=0,原图视为无限流程、永不被下线消耗或删除(v15→v16 迁移与剪贴板解析同口径维护)
production_plans工业计划(activity 区分制造/拷贝/发明/ME-TE 研究;科研专属列 decryptor_type_id/success_rate/research_target_level/actual_output_runs,语义见 flows.md 科研计划节)
plan_blueprint_bindings计划 ↔ 蓝图 多对多绑定(runs_used)
price_snapshots计划价格快照
procurement_items采购清单
watchlist_items自选清单
user_skills角色技能数据

data/ 目录 ​

运行时配置与缓存文件:

文件说明格式
data/settings.json用户设置(主题、自动更新间隔、默认机库引用等),含 settings_version 结构版本,由 services/user_settings.py 惰性迁移升级JSON
data/char_config.json多角色配置(技能、所在地、资金)JSON
data/score_settings.json评分参数设置JSON
data/search_history.json搜索历史(最近 20 条)JSON
data/window_geometry.json窗口位置和大小。启动时若记录的位置与任一屏幕的可用区域都不相交(例如上次在离屏平台/已拔掉的显示器上算出的负坐标),回正为主屏居中并夹进可用区域JSON
data/update_progress.json数据更新进度JSON
data/caches/icons/物品图标缓存PNG
data/terminology.jsonEVE 术语映射表(技能名翻译等)JSON

Schema 迁移与备份 ​

所有数据库 Schema 变更通过 services/schema_migrations.py 注册,用 PRAGMA user_version 追踪版本 (当前:ref=1, mkt=3, user=11, bp=2)。

启动时 ensure_all_schemas() 自动执行待应用的迁移;每次检测到需要迁移的库,先 VACUUM INTO 快照到 database/backups/(保留最近 5 份),迁移出错可手动恢复。

  • 加列(最常见)→ _add_columns(幂等)
  • 大变动(改列类型/拆表/合并/重命名列)→ _rebuild_table(单事务重建表并保留数据)

完整规范见 schema-migration.md。

⚠️ 禁止在业务代码中直接写 ALTER TABLE,必须通过迁移系统。

data/settings.json 版本迁移 ​

settings.json 的键结构变更走 services/user_settings.py 的 SETTINGS_SCHEMA_VERSION + _SETTINGS_MIGRATIONS 机制:读取时惰性升级、保留所有未知键、落盘后返回。 设置里 default_*_hangar_id 引用 hangars.id,机库表被重建(id 漂移)时这些引用会失效—— 这是机库设置"变回默认"的典型场景,升级后如失效需重新指定默认机库。

SDE 数据来源 ​

  • 地址:https://sde.jita.space/latest
  • 格式:ZIP 压缩包(含 YAML/JSON 数据)
  • 首次启动自动下载并导入 reference.db 和 blueprint.db

ESI API 使用 ​

接口用途
/markets/{region_id}/orders/市场订单簿(买单/卖单)
/markets/{region_id}/history/每日成交量历史
/markets/prices/ESI 调整价格(7日均价)
/industry/systems/工业系统成本指数
/universe/types/{type_id}/物品详细信息