我想用 php, js, mariadb(mysql) 寫一個電商網站,但是遇到「更新」的大問題!

我想做一个网站是电商网站
搭配的是 php + mysql
现在遇到一个大问题
我目前是打算要做客制化的服务
也就是这一套电商网站直接卖给你,所有功能都是我维护,包括数据库
但假设有一万间厂商使用这个网站(重点是每个都是独立的运作、数据表也是)
唯一的好处是所有厂商申请的网站都会放到我的同一个强大主机中运行,方便管理

但这样就遇到更新的问题。。。
假设网站某个东西需要修改
某个数据表需要增添栏位
我不可能复制一万次或修改一万次
我能够怎么解决这件事?

阅读 3.6k
7 个回答

电商系统经常遇到的属性变动问题

数据库设计的时候由于未来需求经常改变。
所以设计的时候需要把原本是列的变成行数据,到时候要改列的时候通过插入行数据来实现。
举个例子。

我有个手机。
名称价格,翻盖还是滑盖,智能机还是非智能机等属性

如果按照列的设计。

那么,每个手机的值如下

ID 名称,价格,翻盖/滑盖/直板,是否智能机
1,诺基亚,1000,翻盖,否
2. 苹果,4000,直板,是
3. 安卓,2000,直板,是

如果要增加操作系统字段,需要更改表结构添加字段。

采用行设计

属性表

ID,属性名
1. 操作系统
2. 直板/滑盖/翻盖
。。。

商品表

ID,名称,价格
1 诺基亚,1000
2 苹果 4000
3 安卓 2000

商品属性
商品ID ,属性ID,属性值
1 1 塞班
1 2 直板
2 1 ios
2 2 直板

这样,如果要加属性。添加属性表的数据和商品属性表数据即可,不需要改结构

不同客户之间功能不同问题

首先,程序只有一套,数据库只有一个。

  1. 所以,客户需要实现的功能,我们程序必须实现,每个功能加到一个功能表,参照属性表设置
  2. 然后需要开通该功能的客户,添加一个表,参考商品属性表,

功能

ID,功能名称
1 广告功能
2 可以自定义微信公众号
...

客户功能
客户ID,功能名称
1 1
1 2

做好缓存,那么我读取到客户1的时候会发现客户1有广告功能和微信功能,那么程序根据这个该显示页面的添加页面显示,后台可以操作的,后台也显示出来

你意思应该是,每个网站的代码都是一样的,而且都是部署在同一台服务器,只是在服务器的不同目录?

如果要顺着你的思路,就用svn或git自动部署,你每提交一次代码,会自动同步到每一个你设置的svn或git库。

但是,如果真是每个网站代码都一样,为什么不做成一个网站呢?

这样一样可以解决以下问题:

数据不同
每个数据表都加上一个客户id,每一条数据都绑定一个客户。比如A客户要查他收到的订单,用他的id去查数据库,就是他的数据了。客户之间的数据互不影响。

页面样式不同
你可以多做几个模板,让你的客户可以在管理后台设置样式,他们上传的banner图,也只有在他们的首页出现。

客户的买家不同
买家表也加上客户id。

某模块的逻辑不同
你还可以根据客户id来写不同的后端逻辑。

并发问题
即使你的服务器再强大,业务量大了之后也有扛不住的时候,如果按照你的方法,要把一部分客户的代码迁移到别的服务器。而如果是一整个网站,你就可以做负载均衡。

一份源码给十个客户用,如果A客户要增加一功能,你全部更新到所有代码中,请问其他客户突然看到这新功能他会如何想,是他所要的,为何突然有这功能?
你若能给十个客户了,维护十次很公平。

这个,关键你要有个核心控制,如果你的数据库和主机能承受的话,你可以考虑进行代理商开发功能表的设计。
该表记录每个代理商所能持有的功能,而你增加新的功能后,如果它这个表不存在,即只有添加该功能数据进入代理商功能表的代理商才会拥有并开放。其数据表的设计问题你也可以依据这个思路来做。当然,这只是一个简单思路,只能说给你提供了一个想法。还有就是,那个说得挺对,十个客户,维护十次也公平,毕竟你要有一万个用户,你不可能只是一个人员维护。

我们有一个类似的功能,就是微信公众管理平台,当然没那么多人 大概几十家。
代码:
我们设计的是用的同一套代码,基类里面写的共有的功能,然后扩展功能由继承类实现,根据你所说你大概不会有这个问题,因为看起来你的功能完全都是一样的,可以考虑用一套代码
数据库:
我们用的是同一个主机的mysql,只是database不同,这里为什么不放一个表而分database是因为如果都放一个表用唯一id区分的话也是可以的,但是select、update会很消耗资源,甚至会出现意想不到的情况。
所以我觉得你这个也可以考虑下这么实现,因为你写了你的主机很强大,假设你真的能运行1W商家没问题,那这个应该没问题;当然黒之染大佬的方案也是很全面的,具体这些东西还得根据实际业务来实现

恕我直言,你连这个问题都想不通的时候是不用担心有一万个商家来用你的产品的。

建议重新设计数据库,采用面向对象,一份代码应对多人,给予没人不同的标识,顺而让他们干不同的事,其实就跟商品点赞,收藏是一样的道理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题