一个好工具的目标,是让使用者专注于业务本身,而非在工具的操作上消耗心力。
然而,作为许多业务基石的数据导入导出功能,过去恰恰是这方面的“重灾区”。它本应可靠、智能且无感。基于这样的反思,我们审视了过去的功能中存在的几个核心问题:
- 映射配置难以理解。 尤其是关联表的配置,其背后的数据库逻辑对许多用户来说不够直观,容易感到困惑。处理过程不透明。 点击“导入”后,由于缺少清晰的进度反馈,用户难以判断当前状态,只能被动等待。排查错误困难。 一旦导入失败,模糊的错误信息让问题的定位和修改都相当耗时。
为了解决这些根源问题,我们对整个导入导出功能进行了重构。
🚀 更强大的性能
市面上的产品存在一个普遍的矛盾:易用的无代码平台,数据处理能力往往受限;而强大的开发者平台,又需要使用者编写复杂的脚本。
工具的易用性不应该成为其性能的上限,而强大的性能也不应该以牺牲用户体验为代价。这两者理应相辅相成。Zion 的这次迭代,正是为了打破“易用”与“强大”无法兼得的局面。
平台 | 最大导入行数/文件大小 | 性能特点与限制 |
---|---|---|
Zion | 高达 10,000,000 行 | 无需代码,原生支持千万级数据,每分钟可达 10 万行 |
Bubble | 最高 30,000 行 (企业版) | 依赖前端上传,大文件支持不稳,受套餐等级限制 |
Webfllow | 最高 10,000 行 (商业版) | 4MB 文件大小上限,主要用于 CMS 内容填充 |
Supabase | 无明确上限,但需专业工具 | 需使用命令行工具及 COPY 命令,对没有计算机基础的用户不友好 |
Firebase | 无明确上限,但有写入限制 | 导出到 Google 表格 |
✨ 更良好的体验
- 化繁为简的配置
过去,用户需要理解复杂的数据库ID逻辑才能建立关联,而现在,这一过程被简化为直观的界面引导。
更进一步,我们认为好的设计不应只停留在简化操作,更要能主动地防止错误发生。为此,我们设定了一条规则:在进行关联匹配时,必须使用设置了 “唯一约束” 的字段(如用户名、手机号)。这并非限制,而是一道前置的“安全锁”,从根源上杜绝了因数据重复而导致的匹配错误,确保了每一条数据关系都绝对精准
- 保证流程的可观察性和可控性
工具不应是“黑盒”。任何耗时较长的操作,都应该给予用户清晰的反馈和充分的掌控感,以消除不确定性带来的焦虑。
基于此,新增的“历史记录”功能,会保存每次导入或导出的记录(保存7天),长时间运行的任务也可以放心地在后台处理。此外,导入流程中新增的“启用触发器”选项,则将“是否触发自动化”的控制权完全交还给用户,避免了对现有业务逻辑的意外干扰。
- 保证数据的精准可靠
对于数据工具而言,可靠性是信任的基石。任何可能导致数据不一致或“脏数据”的情况,都应该在产品设计阶段被根除。
这就是为什么每一次导入都被设计成一个“事务性操作”。这意味着,要么100%的数据都成功写入;要么,哪怕只有一行数据出错,整个导入任务也会被安全地回滚,不在数据库中留下任何痕迹。清晰的错误日志则保证了问题的可追溯性,让修正和再次导入变得轻松。
🛠️ 技术实现
- 数据库操作的事务性处理
为了保证导入/导出数据的正确性,我们在整个导入的过程中使用一个数据库事务进行操作,同时引入了PostgreSQL的临时表机制,所有的导入文件的数据处理先在临时表上进行操作,再由临时表根据自增主键(PostgreSQL中的Sequence)将数据同步至正式表中,当出现数据错误或者冲突时进行事务回滚,保证了数据的一致性。
- 独立的数据库连接池
由于导入/导出经常伴随着大量的数据,如果需要保证事务性处理则需要长时间占用数据库连接。为了保证在导入过程中整个应用的常规业务尽可能正常进行,我们为整个导入/导出服务建立了独立的数据库连接池,将导入/导出任务与日常的数据库访问进行隔离,避免因导入/导出过程中对于数据库连接长时间的占用而造成的日常业务无法执行。
- 导入/导出文件的流式读写
大量的数据导入/导出经常伴随着一个较大文件的读取/写入,如果先将文件数据全部写入服务器内存中会导致服务器的因内存空间不足而卡顿或报错。我们基于阿里云OSS服务的文件流针对xlsx和csv文件进行了流式读写,(以导入为例)即每次读取一定行数的数据进入内存,在将这些数据写入临时表后再进行下一部分数据的读取。经过流式读写优化后即使是需要导入/导出百万、千万行级别的数据,服务器的内存使用压力仍然处于一个可控范围。
结语
数据处理是业务发展的基石。我们相信,一个好的工具,理应将复杂留给自身,将简单交给用户。欢迎即刻体验 Zion 全新升级的导入导出功能。