参考文章:
https://supabase.com/blog/postgres-as-a-cron-server
BaaS(Backend as a Service,后端即服务)是指我们不再编写或管理所有服务端组件,可以使用领域通用的远程组件(而不是进程内的库)来提供服务。
Supabase 是一个开源的 Firebase 替代方案。官方表示,其正在使用企业级开源工具构建 Firebase 的功能。Supabase 可以:
监听数据库的变化。 查询你的表,包括过滤、分页和深度嵌套关系(如GraphQL)。 创建、更新和删除行。 管理你的用户和他们的权限。 使用一个简单的用户界面与你的数据库进行交互。
Supabase 的美妙之处在于,在可能的情况下,他们选择了使用现有的库和数据库。他们没有利用最先进的技术,而是使用PostgreSQL来实现大量的功能,并使用其他库来实现其他功能。
独立开发者使用 Supabase 作为 Backend 方案,可以在很大程度上节约心智成本与时间成本。本专栏将在未来,持续更新关于 Supabase 的一系列玩法。
0x01 ⏰定时服务简介
在软件工程实践中,我们经常性的会用到定时服务,定时服务在各项系统重均有实现。
Elixir
—— GenServerLinux
—— CronPostgres
—— pg_cron
在 Supabase 中,我们是通过pg_cron
来实现定时任务的。
https://github.com/citusdata/pg_cron
关于pg_cron
,我们掌握四条 SQL 命令即可:
创建新的 cron
任务
select
cron.schedule(
'webhook-every-minute', -- name of the cron job
'* * * * *', -- every minute
$$
select status
from
http_post(
'https://webhook.site/2f767069-809e-4c75-ae1e-8bd7bc5a0090', -- webhook URL, replace the ID(223c8..) with your own
'{"hello": "world"}', -- payload
'application/json'
)
$$
);
查看所有的 cron
任务
select * from cron.job;
查看 cron
任务的执行结果
select * from cron.job_run_details;
关闭已有的 cron
任务
SELECT cron.unschedule('webhook-every-minute'); -- by cron name
SELECT cron.unschedule(1); -- by cron id
💡快速生成 Cron 时间(也就是上面的
* * * * *
部分):https://crontab.guru/
0x02 快速实践 pg_cron
打开 Supabase 的SQL Editor
:
执行创建新cron
任务的命令(见上)。
在webhoot.site
的页面可以看到一分钟接收到一条POST
。
https://webhook.site/
执行关闭cron
命令:
0x03 实战!定时从 API 接口拉取数据插入数据库中
这个是一个在日常工程实践中常见的实际案例。例如,我们需要定时拉取关于某个合约的最新 Events 信息,以进行本地缓存。
💡这里有一系列测试用的 API 接口:
https://apipheny.io/free-api/
在这里我们使用这个接口:
https://www.boredapi.com/api/activity
3.1 创建新表格
简单期间,我们创建一个新的表格,新建一个叫 Payload 的字段存储每次cron
抓取到的数据。
3.2 新建 cron 任务
新建cron
任务:
select
cron.schedule(
'webhook-every-minute', -- name of the cron job
'* * * * *', -- every minute
$$
insert INTO table_name(payload)
select content::json from http_get('https://www.boredapi.com/api/activity');
$$
);
点击run
创建:
3.3 查看 cron 执行结果
3.4 在 Table Editor 里查看数据库的变化
数据每分钟增加,和预期相符。
历史文章:
独立开发者工具梳理 | Indie Hacker 成长指南(柒)
全链上创业组织 | Indie Hacker 成长指南(陆)
运行社区的 4 大挑战 | Indie Hacker 成长指南(伍)
产品上线前如何解决资金问题?| Indie Hacker 成长指南(肆)
Waitlist 经验谈:独立开发者企业的工具栈 | Indie Hacker 成长指南(叄)
如何围绕你的生活设计你的事业 | Indie Hacker 成长指南(贰)
打破 MVP 魔咒 | Indie Hacker 成长指南(壹)