[RFC] 077 - 兼容 Postgres/Pglite 的数据导入导出 #5147
arvinxx
started this conversation in
RFC | 特性开发
Replies: 2 comments 1 reply
-
importTableData 实现逻辑flowchart TD
A[开始] --> B["初始化结果对象和ID映射
目的: 准备数据结构以跟踪导入进度和维护ID关系"]
B --> C["查找已存在记录(基于clientId和userId)
目的: 识别数据库中已存在的记录,防止重复插入"]
C --> D{"需要保留原始ID?
目的: 决定是否使用源数据中的原始ID"}
D -->|是| E["检查ID是否已存在
目的: 避免ID冲突,确保导入数据与现有数据不冲突"]
D -->|否| F["为已存在记录建立ID映射
目的: 创建原始ID到数据库ID的映射表,用于关联数据处理"]
E --> F
F --> G["筛选需要插入的记录
目的: 排除已存在的记录,只处理新数据"]
G --> H{"有需要插入的记录?
目的: 确认是否有新数据需要处理"}
H -->|否| Z["返回结果
目的: 没有新数据时,结束过程并返回统计信息"]
H -->|是| I["准备导入数据
目的: 转换数据格式,处理日期、ID、用户关联等字段"]
I --> J["遍历每条记录
目的: 逐条处理每个需导入的记录"]
J --> K{"检查唯一约束
目的: 验证记录是否违反数据库唯一约束"}
K -->|无冲突| N["继续处理下一条记录
目的: 记录无冲突,进入下一条"]
K -->|有冲突| L["记录冲突信息
目的: 记录冲突详情,用于生成报告"]
L --> M{"应用冲突策略
目的: 根据配置决定如何处理冲突数据"}
M -->|skip| M1["标记记录为跳过
目的: 放弃导入此记录,保留原有数据"]
M -->|modify| M2["应用字段处理器
目的: 修改冲突字段,使数据变为唯一"]
M -->|merge| M3["更新现有记录并标记为跳过
目的: 将新数据与现有数据合并"]
M1 --> N
M2 --> N
M3 --> N
N --> O{"所有记录处理完毕?
目的: 确认是否完成所有记录的预处理"}
O -->|否| J
O -->|是| P["过滤掉标记为跳过的记录
目的: 移除不需要插入的记录"]
P --> Q["清除临时标记
目的: 移除处理过程中添加的标记,准备数据插入"]
Q --> R["分批处理(每批100条)
目的: 将大量数据分批处理,提高效率和稳定性"]
R --> S["执行批量插入
目的: 将数据写入数据库表"]
S --> T{"插入成功?
目的: 检查数据库操作是否成功"}
T -->|是| U["更新ID映射和结果计数
目的: 记录新插入记录的ID映射,更新成功计数"]
T -->|否| V["记录错误和冲突信息
目的: 捕获并分析插入失败原因,更新错误计数"]
U --> W{"所有批次处理完毕?
目的: 确认是否完成所有数据批次的处理"}
V --> W
W -->|否| R
W -->|是| Z
Z --> End[结束]
|
Beta Was this translation helpful? Give feedback.
0 replies
-
所以最终设计是什么样的?沿用冗余client_id还是改主键? |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
在 #4868 中我们完成了 client db 切换到 pglite,但目前反馈了一个比较大的问题: #5144 。
这个问题的根因出在现在的导出实现是为 dexie 时期的db制作的,而不是针对 postgres 这样标准的关系型数据库。
因此,我们需要为新时期的 pglite和 postgres 提供一个新的数据导入导出实现。
实现思路
数据导出
导出的核心逻辑相对来说应该比较简单,将当前 db 中的关键表,按用户维度做一次导出,不进行任何修改,然后在导出 json 中包含所有表记录的结构即可。
注意事项:
完成该功能后,我们应该就能实现 pglite 数据导入 serverDB 版,serverDB 也可以导出数据导入回 pglite。
最近在具体实现过程中发现一个问题就是目前的 database 有不少表是不支持 userId 的,这对于导出数据有比较大的挑战,因此先准备做一轮 database sql 的迁移,进而实现更加完善的表结构逻辑。
进展
user_id
for data export #7022Beta Was this translation helpful? Give feedback.
All reactions