功能需求:批量插入更新产品数据。
工作流程:将需要更新的产品数据(csv)+产品图片压缩成一个 zip 文件,上传至服务器指定目录,然后通过 web 方式,解压 zip 文件,读取解析 csv 文件,分离出产品的主要数据和属性数据,并根据 csv 中每一个产品的 ID 获取该产品的图片路径,然后复制图片到以产品序号命名的文件夹中,然后通过字符串连接的方式,组成多条 SQL 语句,最后统一插入数据库。 另外,产品的搜索使用 elasticsearch ,所以在更新产品数据时,同时需要更新 elasticsearch 中的数据。
ZIP 文件结构: 1,product.csv 2,以 csv 中每一条产品的 ID 为命名的文件夹,文件夹里包含三个文件夹(缩略图,产品图,附件),缩略图为一个图片,产品图和附件为多个文件; 3 , csv 文件和产品 ID 为命名的文件夹同级;
涉及到的数据表: 1,product:存储产品的主要数据:标题,缩略图,单价,详细描述,店铺 ID ,创建人 ID ,分类 ID 等等 2,product_attribute:存储产品的属性数据:规格,尺寸,重量,以及其他属性内容; 3,product_images:存储产品图片以及附件,根据其中 type 字段进行区分
服务器配置(均为阿里云服务器): 1,测试服务器:CPU:2 核,内存:4G 内存,mysql 在服务器上; 2,线上服务器:CPU:4 核,内存:8G 内存,mysql 为单独的 RDS:CPU:1 核,内存:1G 内存,最大连接数为 300;
PHP 框架: Symfony 3 数据插入语句是: $productAttachmentSQLExec = $dataConnection->prepare($productAttachmentSQL); $productAttachmentSQLExec->execute();
现在遇到的问题是: 就算处理一个 100M 以内的压缩包,都会导致内存溢出,数据导入不成功, csv 中的数据仅仅为 100 多条数据; 经过测试,如果只解析 csv 文件,就算有 1 万条数据,都可以处理,但是要涉及到图片的处理,就内存溢出。
我想过通过写 shell 脚本来处理 zip 的解压以及移动,但是不熟悉这个 shell 脚本的编写,所以进行不下去。
请教下 V2 上的朋友,有没有好的解决方案。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.