商品库商品多网站分发策略探究

董哥007 2019-08-05 09:52:20
我们公司商品库数据来自于京东和苏宁。对方提供接口给我们去拉数据 示意图如下

我们公司商品库表结构为
CREATE TABLE `goodsku` (
`id` int(10) NOT NULL COMMENT '自动增长id序列',
`goods_type` tinyint(1) DEFAULT NULL COMMENT '商品来源类型 1表示京东 2表示苏宁',
`goods_id` int(10) DEFAULT NULL COMMENT '商品源库id',
`goods_price` decimal(10,2) DEFAULT NULL COMMENT '商品价格',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;




现在问题是,我们公司同时开展3个购物网站,分别为 www.a1.com www.a2.com www.a3.com
要求三个网站实现商品数据隔离,意思是商品数据修改互不影响,那么我很自然的想到的是 为每个网站都建立自己的商品表,表结构和goodsku一致。

现在已知goodsku有1200万记录,要实现把这些数据导入到三个网站的商品表里面去 这个导入程序首先肯定是一种异步定时任务操作
为了效率起见,我们必须保证自己的导入程序每次处理不重复。我为这个表增加一个是否已导入的字段 表看起来是这样
CREATE TABLE `goodsku` (
`id` int(10) NOT NULL COMMENT '自动增长id序列',
`goods_type` tinyint(1) DEFAULT NULL COMMENT '商品来源类型 1表示京东 2表示苏宁',
`goods_id` int(10) DEFAULT NULL COMMENT '商品源库id',
`goods_price` decimal(10,2) DEFAULT NULL COMMENT '商品价格',
`is_import_a1` tinyint(1) DEFAULT NULL COMMENT '是否已导入a1商城 1表示已经导入了 0表示未导入',
`is_import_a2` tinyint(1) DEFAULT NULL COMMENT '是否已导入a1商城 2表示已经导入了 0表示未导入',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



在看我的处理程序 我这里用伪代码实现
public function goodsimport(){
// 先从公司商品库里面抓取商品记录 我每次处理200条
// 先往网站1里面商品表插入jil
$goods_list = M('goodsku')->where('is_import_a1=0')->limit(200);
foreach ($goods_list as $goods){
// goodskua1表为网站1 www.a1.com的商品表名称
M('goodskua1')->data($goods)->add();
}

// 同样的代码逻辑导入到www.a2,com

// TO DO


}


这个处理程序我用定时任务去驱动。放在后台运行 是实现了我上述需求。。现在本人有点疑问。
就是假如我再来一个商城 我难道又在goodsku表加一个类似于is_import_an 的字段吗,想问下各位大哥有没有什么更好的设计方案满足我上述需求。


...全文
51 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
walk walk 2019-08-22
  • 打赏
  • 举报
回复
1.每个分网站表中应该有个关联id字段,比如goodsku_id和 你的goodsku里的主键id关联,判断是否导入过应该根据分网站表的goodsku_id判断 2.goodsku表中应该有个入库时间字段,比如addtime,数据导入到各分表的时候,addtime也要在各分表中更新;下次导入数据时,从各分表中取出最大的addtime,从goodsku查询addtime大于各分表最大时间的数据导入(同时根据关联id判断是需要update还是insert,或者直接先delete再insert)
YYYYolanda 2019-08-22
  • 打赏
  • 举报
回复
每个网站保存一份goodsku,用作数据展示。一旦有数据更改,将更改后的数据连同id保存到新表比如goodsku_n。数据展示的时候查两个表,如果表goodsku_n有数据则展示,goodsku_n没有数据则展示表goodsku的数据。
这样如果再多个网站,你就只用复制一个goodsku表过去就行,不用改goodsku的结构或数据。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧