PHP应用程序到桌面应用程序

我为我的公司开发了一个 PHP应用程序,问题是我刚刚发现该应用程序也必须脱机工作.

应用程序的工作原理如下:从MySQL数据库加载一些数据,然后你必须编译一些清单,在数据库中插入新数据,最后生成一个JSON.

该应用程序将被我们公司的许多人使用,因此我们考虑在他们的计算机上安装Web服务器(Apache)并使应用程序在他们的机器上运行.问题是,如果我们决定采用这种方式,我们必须:

>在启动应用程序之前,从MySQL下载所有数据
(当用户访问互联网时)并将此数据保存为JSON
文件

>更改项目中的所有查询,以便从JSON而不是数据库中获取数据
>此外,有很多函数可以实时将数据插入数据库,因此我们必须使用SQLite然后
将数据传输到MySQL数据库
>最后,通过这种方式,使用该程序的人可以访问所有PHP文件,他们可以随时修改它们.

我们没有时间考虑真正的桌面Java应用程序,因为这个应用程序将从1月开始使用,因此我们没有时间进行开发.

你有什么建议吗?有没有我没想过的东西,或者一种可以帮助我的技术?
谢谢!

PS.我考虑过像PHP桌面的Nightrain这样的程序,但它们只避免安装Apache,仅此而已……

最佳答案 介绍

既然你显然需要一个快速的解决方案,我会给你一个.这是基于我们所知的信息.警告,这个解决方案并不优雅,当你有机会时你需要更换它.

>清除所有主键和外键.
>用索引替换为BINARY(16).

每个记录都需要使用CSRNG随机生成伪主键,二进制16只是方便遵循UUID标准.这将确保每个新记录保持唯一索引,尽管缺乏其他分布的知识.

您的表将没有主键索引,因为它们是唯一的,并且由于数据库将被分发,因此无论如何都无法检查键的唯一性,因此没有必要使用它.

>每台笔记本电脑都需要整个数据库的副本.
>每台笔记本电脑只允许添加新数据,从不删除或修改基础数据.

实际上,通常,中央数据库上的所有数据从现在开始将是一次写入/只读.新合并数据的错误程度无关紧要,绝不能删除或修改.

>新数据应根据其时间戳被视为“更新”.

所以每个表都需要一个时间戳.

>最后,应保留何时进行复制分发的记录,以保留将哪些数据合并回中央数据库的知识.

您剩下的是一个承载所有数据的中央数据库,对数据的更改将由更新数据的存在来表示.

结论

如果我真的有,我只会使用这个解决方案.事实上,我估计它甚至有80%的可能性甚至可以用于低于标准的质量.它还假设您可以将所有剩余的开发时间用于重新分解数据插入方法.

您将不得不处理这样一个事实,即中央数据库需要大量的管理工作来管理数据的完整性,并且您需要假设您无法更改格式输入与笔记本电脑合并.

每个新功能都需要向后兼容旧数据.

点赞