Address数据同步机制拆解:增量导入、有界重试与配额轮换完全解读
Address数据同步机制拆解增量导入、有界重试与配额轮换完全解读【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器覆盖 27 个国家和地区支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/addressAddress 是一个基于真实开放数据街道、行政区、坐标、邮编的自托管地址与合成测试资料生成器覆盖 27 个国家和地区。它的核心难题在于如何低成本、可恢复地把 OSM、Overture、Geofabrik 等海量上游数据同步进本地数据库。这篇文章拆解 Address 同步引擎的三大核心机制——增量导入、有界重试与配额轮换帮助你理解它何时同步、如何重试、怎样省额度。一、架构总览独立进程 国家级事务同步服务是一套独立运行的 ETL 管道源码位于 server/sync/与主 API 共享同一个 PostgreSQL 数据库并以国家为单位组织事务入口与调度address-etl.mjs 负责执行单次同步index.mjs 启动管理 API 并在开启SYNC_SCHEDULER_ENABLED时自动补跑未完成的初始化。任务协调coordinator.mjs 中的SyncCoordinator用文件锁保证同一时刻只有一个同步任务在跑并默认设置 5 分钟锁超时、90 分钟任务超时防止进程卡死后永远占用锁。发布原则每个国家的数据在单个事务中发布失败不会替换现有 active dataset线上服务始终能用上一份好数据。管理接口默认仅监听127.0.0.1:8791并要求BearerToken 认证详见 server/sync/README.md。二、增量导入只同步到期的国家27 个国家不可能每天都全量重导。Address 的增量决策分三层1. 到期检查country duecountry-plan.mjs 的isCountryDue是核心闸门距上次成功同步不足intervalDays的国家直接跳过但未达到目标数量的国家会自动降为每天重试加速追赶目标。排序规则 planCountryShards 则让失败国家优先、最久未成功的国家靠前。2. 输入指纹去重address-etl.mjs 会为每个分片计算指纹签名包含来源适配器、上游数据版本、导入修订号、国家级策略参数等。相同指纹且已完成或已耗尽的国家不会重复导入只有上游版本更新、新来源接入或提取能力变化后才会重新获得执行资格——这就是相同输入指纹已经完成或耗尽时不重复导入的实现。3. Checkpoint 续跑长任务如日本实测峰值约 6.5 GB 内存中途失败时进度以checkpointStage/checkpointToken记录在任务状态中见 address-etl.mjs额度、冷却或 checkpoint 到期后自动从断点续跑而非从零开始。三、有界重试三层防线绝不无限循环有界是这套同步系统最显眼的特征——每一层重试都有明确次数上限和退避策略层级位置策略HTTP 请求级source-adapters.mjs默认 3 次尝试仅对 408 / 429 / 5xx 等可重试状态码生效退避间隔按250ms × 2^(n-1)指数递增下载传输级source-adapters.mjsGeofabrik 大文件下载走curl --retry 3 --retry-all-errors重试耗尽后校验和仍不符则判定失败一天内已完整下载的旧版本可复用避免跨日重复下载每日任务级scheduler.mjstriggerDailySync默认maxAttempts 3失败后重试延迟60s × 2^(n-1)且封顶 1 小时当日 3 次耗尽后记录attempts-exhausted并等待次日任务级重试的状态lastAttemptDate、attemptCount、nextRetryAt通过临时文件原子写入持久化进程重启后依然记得今天重试了几次——这意味着重试预算是按自然日计的不会因服务重启而无限消耗上游。四、配额轮换凭据池 冷却窗口需要同据如韩国的GEOAPIFY_API_KEY的同步任务凭据管理交给 provider-credential-pool.mjs 中的ProviderCredentialPool它实现了教科书式的配额轮换取用顺序公平acquire按last_used_at升序取最久未使用的凭据并按qps_limit判断是否仍在 QPS 窗口内天然形成轮换而非打爆单个 Key。多维配额窗口quotaAvailable同时检查按天、按月可带时区偏移的配额窗口还会读取上游返回的观察值实际额度与重置时间修正本地计数防止本地以为没超、上游早已限额。失败冷却凭据失败后进入cooldown/quota_exhausted状态冷却时间来自上游的Retry-At缺省规则为配额耗尽冷却 24 小时、普通错误冷却 5 秒到期的凭据会在下次取用时自动恢复为healthy并清空上报的额度快照。安全存储凭据使用 AES-256-GCM 加密落库主密钥来自CONFIG_MASTER_KEY解密失败的凭据会被标记needs_review而不是反复尝试。配合 geoapify-credential-bridge.mjs 等桥接器同一提供商配置多个 Key 时即可一个 Key 限流自动切下一个。五、存储预算同步目录的安全带同步过程会产生大量下载残片与中间产物Address 用两道预算管住磁盘storage-budget.mjs同步目录达到40 GB后停止 shadow 扩容预计达到45 GB时直接中止写入。清理策略也很克制只在队列空闲时清理 staging 临时产物启动时立即检查一次此后默认每 15 分钟一次死亡 PID 的临时文件立即回收无主下载残片默认保留 6 小时——避免误删正在下载中的文件。此外run-address-sync在可用内存低于 2 GiB 时拒绝启动见 run-address-sync.mjs。六、如何观察同步状态 不用读日志也能掌握全局公共监控页展示各国初始化进度与覆盖率前端实现见 src/components/PublicMonitor.tsx管理后台在/admin/可查看各国策略目标、凭据配置与同步任务相关界面组件位于 src/components/admin/。总结三句话记住这套机制增量指纹去重 到期检查 checkpoint 续跑相同输入绝不重复导入失败任务从断点继续有界HTTP 3 次指数退避、每日 3 次重试封顶 1 小时每一层重试都有预算轮换凭据池按最久未用公平取用配额耗尽自动冷却 24 小时Key 之间无缝轮转。这套设计让自托管的 Address 在数据要新和别把上游打挂之间取得了很好的平衡——这也是它敢覆盖 27 个国家地区的底气所在。【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器覆盖 27 个国家和地区支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/address创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

服务器无图形界面也能跑扫描:open·kritt Headless CLI 终端操作完整指南

服务器无图形界面也能跑扫描:open·kritt Headless CLI 终端操作完整指南

服务器无图形界面也能跑扫描:openkritt Headless CLI 终端操作完整指南 【免费下载链接】open-kritt Open-source, self-hosted AI vulnerability research tool that orchestrates agents to find and validate security issues in code. 项目地址: https://gitc…

2026/10/11 1:53:03 阅读更多 →
嵌入式 Linux 字符设备驱动核心知识点汇总

嵌入式 Linux 字符设备驱动核心知识点汇总

一、开发基础与内核模块开发环境:基于ARM交叉编译工具链,配套U-Boot、Linux内核、根文件系统的编译与烧录全流程。内核模块是驱动的最小载体支持动态加载/卸载,无需重新编译内核核心要素:模块入口函数、模块出口函数、模块参数、模…

2026/10/9 16:43:01 阅读更多 →
【嵌入式Linux驱动学习】Day1-Day2 全流程梳理:环境搭建→U-Boot→内核→根文件系统→驱动基础

【嵌入式Linux驱动学习】Day1-Day2 全流程梳理:环境搭建→U-Boot→内核→根文件系统→驱动基础

本文整理了嵌入式Linux驱动学习前两日的完整内容,从最基础的虚拟机双网卡环境搭建,到TFTP/NFS服务配置、交叉编译工具链,再到U-Boot编译烧录、内核裁剪、BusyBox根文件系统构建,最后梳理驱动核心基础知识点。全程结合实操步骤与核…

2026/10/9 16:43:27 阅读更多 →

最新新闻

基于 Raft 协议的强一致分布式锁选型:Etcd vs Redis 在金融级场景下的对比

基于 Raft 协议的强一致分布式锁选型:Etcd vs Redis 在金融级场景下的对比

在分布式锁的选型会议上,架构师们经常会面对两派激烈的技术争吵: 一派是“性能实用主义者”,他们力挺 Redis:“Redisson 封装完备,单机吞吐破 10 万 QPS,看门狗自动续期极其优雅,全网普及度最高…

2026/10/11 1:52:42 阅读更多 →
会务信息载体的演进:纸质、PDF 与结构化数据源的分发成本与版本一致性

会务信息载体的演进:纸质、PDF 与结构化数据源的分发成本与版本一致性

会务信息管理的本质问题,和很多分布式系统面对的问题很像:一份数据要在多个地方、多个时间点被多个人正确读到,而这期间数据本身还会变。会议这个场景把这个问题放大了。它一次性、不可回滚,所有读者集中在同一时间出现&#xff0…

2026/10/11 1:52:42 阅读更多 →
3Blue1Brown的手写数字图像识别实验复现

3Blue1Brown的手写数字图像识别实验复现

深度学习框架这里用到的是Pytorch。一、加载数据(一)import部分导入一些我们需要的库:import torch from torch import nn #包括sigmoid() linear()等宝藏函数捏 from torch.utils.data import DataLoader #数据集加载器,主要是为…

2026/10/11 1:52:42 阅读更多 →
JavaScript 的原型与继承——对象之间是怎么扯上关系的

JavaScript 的原型与继承——对象之间是怎么扯上关系的

引言如果说作用域和闭包是 JS 的"空间"问题,那原型和继承就是 JS 的"血缘"问题。JS 没有传统面向对象语言里的类继承体系,它用的是另一套逻辑:原型链。这套逻辑让很多人初学时一头雾水,但一旦想通&#xff0c…

2026/10/11 1:52:42 阅读更多 →
枚举类型全解析:从代码可读性到状态机与设备枚举的编程之道

枚举类型全解析:从代码可读性到状态机与设备枚举的编程之道

枚举(enum)类型算是编程里最被低估的关键字了。很多人一提到 enum 就只想到“给数字起名字”,觉得它无非是让type 1变成type TYPE_A,值没变,只是顺眼了一点。我早先也这么觉得,直到后来在业务代码、算法题…

2026/10/11 1:52:42 阅读更多 →
WPF贝塞尔曲线绘制平滑折线图实战指南

WPF贝塞尔曲线绘制平滑折线图实战指南

简介:本资源是一个基于WPF与C#实现的贝塞尔曲线动态折线图可视化项目,面向.NET桌面开发初学者及图形学实践者,解决传统折线图缺乏平滑过渡与动态量程适配的问题。项目完整封装为RAR压缩包(65KB),共36个文件…

2026/10/11 1:51:41 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →