我的公司使用php + mysql开发了一个Web应用程序.系统可以向用户显示产品的原始价格和折扣价格.如果您尚未登录,则会获得原始价格,如果您已登录,则会获得折扣价.这很容易理解.
但我的公司想要在系统中有更多的功能,它希望根据不同的用户显示不同的价格.例如,用户A是一个黄金parnter,他可以获得50%的折扣.用户B是银色的parnter,只有30%的折扣.但是这个逻辑没有在原始系统中准备,所以我需要在数据库中添加一些属性,至少在这个例子中是用户类型.是否有关于如何将当前数据库合并到我的新版本数据库的建议.此外,所有数据都应该保留,服务器应该全天候工作.(在数据库中停止)
有可能这样做吗?此外,任何建议未来维护建议?你呢.
您是否使用 ORM 作为数据访问层?我知道 Doctrine 附带了一个迁移 API,它允许版本上下切换(以防新版本出现问题)。
在任何框架或 ORM 考虑之外,快速脚本将最大限度地减少速度减慢(或进程太长时的停机时间)。
在我看来,我宁愿选择 30 秒的网站访问中断并显示信息页面,也不愿获得更短的中断时间但出现明显的错误或根本不显示。如果中断时间很重要,最好在夜间或交通流量较少的时候进行。
这一切都可以在一个脚本中完成(或者至少由一个命令行启动),当我们要执行此类脚本时,我们将其包含在 shell 脚本中:
该脚本应该在每个步骤进行检查并停止第一个错误,并且它应该详细(但简洁)地说明它在所有步骤中执行的操作,因此如果出现问题,您可以更快地修复应用程序。最好的是一个可恢复的脚本(第 2 步出错 - 停止进程 - 手动修复 - 第 3 步恢复),我从来没有花时间以这种方式实现它。
如果工作得很好,但必须在尽可能接近生产环境的环境中对此类脚本进行深入测试。一般来说,我们在本地开发此类脚本,并在与生产环境相同的平台上测试它们(只是不同的路径和数据库)
如果等待页面不可行,您可以不选择,但需要确保数据和用户会话的完整性。例如,在升级/数据传输期间对表使用 LOCK,并对修改的文件使用排他锁(我认为是 SVN)
可能还有其他更好的解决方案,但这基本上是我使用的并且它为我们完成了工作。主要缺点是这种脚本必须在每个主要版本中重写,这促使我寻找其他选项来执行此操作,但哪一个???如果这里有人有更好、更简单的选择,我会很高兴。