基于 Notion 做自动化,单选属性要慎用
前不久基于 Notion 的数据库做了个监控系统,每天会往一个数据库中导入 1000+ 页面,AI+人工处理后全部删除,平稳运行了两周左右,突然没法再新建页面了。
因为做了自动化,这上千个页面的新建都是通过 Notion API 自动执行的,但今天新建到还剩最后几个,无论如何都会返回这样的报错信息。
```
{"object":"error","status":400,"code":"validation_error","message":"Unsaved transactions: Your schema size of 500069 bytes has exceeded the maximum database schema size. We recommend schemas of less than 50 KB to ensure performant query times."}
```
初步看我理解为是数据量太大了,让减小一点,查官方文档也说是 schema size 最多 50kb,超过的话会阻止数据库的更新(图1)。
刚开始还挺纳闷的,心想数据库里目前也就 1000 多个页面,平常在用的其他 Notion 数据库比这数据量更大的都有,也没遇到这问题,为什么会这样呢?
排查一番,我发现最可疑的是 Notion 的删除功能设计,不管是 app 内人工删除还是通过 API 删除,都不是永久删除,而是通过更新 archive 状态实现的,类似放到回收站里(图2)。
我怀疑是删除的页面还会占空间,于是新建了一个同样表头的空数据库,尝试往其中导入数据,但又出现了同样的报错,也是在添加最后几个页面时触发的。
看来问题和删除的页面无关。
我又把目光放回到数据库的属性上,我上周刚新建过几个属性,照理同等的页面数会占更大的空间,也有可能导致体量过大的问题。再看官方文档中,得知 schema size 的大小取决于属性的数量/表格的列数(图3)。
于是几番斟酌后,删去了两个不太重要的属性,重新导入数据,但又是一样的报错。
又去查了 Notion API 文档,发现上面说 validation_error 是属性校验没通过,怀疑是自己不小心改了什么属性名,但检查了下日志发现也没问题。
最后还是回到报错信息,里面那段 exceeded the maximum database schema size 还是很让我在意。我突然想到问题可能出在单选属性上,因为印象中每个选项都有单独的名称和 ID(图4),而我每天处理上千个页面的数据,即便页面删除,已经创建过的选项仍然会占用空间,这部分占用肯定是会持续增长的。
因而想到把单选转为文本,尝试这么做时突然发现响应很慢、非常可疑,转换后重试导入数据,发现终于成功了,问题果然出在这里!
我从这次修 bug 中学到的:
- Notion API 新建页面时如遇报错、提示超过了 schema size 上限,可排查有无选项超多的 select 属性
- 让 schema size 增长的不止属性数,select 选项多起来也会
- 为了避免通过 Notion API 新建页面失败,属性能用 text 就尽量不用 select
- 遇到 Notion API 报错,优先考虑查官方文档,尤其是不清楚的名词概念,全局搜索可能就会找到突破口
食品经营许可证 JY11105052461621
©2024 GAMECORES
评论区
共 条评论热门最新