我需要设计一个REST API,用于导入包含30列的员工CSV文件。文件中的记录数可能因业务规模而异,可能为10,可能为5000。
这是我的设计方法
如果是前两个选项,则需要用户在发送前读取CSV并转换为JSON。
问题
答案 0 :(得分:0)
因为我对javascript不熟悉,所以我的回答将集中在问题1,关于如何设计一个用于导入大量数据的api。 一般有同步和异步两种方式。
为了避免长时间等待将数据导入数据库,我们应该限制每个请求的数据行数。如果用户导入的数据超过限制,前端需要将数据拆分成多个请求。为了更好的用户体验,我们可以显示当前的导入进度。
相比于同步方式,异步的实现稍微复杂一些。
1.我们可以上传csv或json文件到Amazon S3,然后通过api发送文件地址到服务器。
2.异步worker在s3down文件后开始将数据导入数据库。为了避免数据库阻塞,我们还得批量导入。
3.为了获取导入进度,在导入完成后前端通过api轮询或者服务端通知前端。
两种方式各有利弊,您选择哪种方式取决于数据量和实现复杂性之间的权衡。