PHP 应用到桌面应用
PHP application to Desktop Application
我为我的公司开发了一个 PHP 应用程序,问题是我刚刚发现该应用程序也必须离线工作。
该应用程序的工作方式如下:从 MySQL 数据库加载一些数据,然后您必须编译一些清单,将新数据插入数据库,最后生成 JSON.
该应用程序将被我们公司的很多人使用,因此我们考虑在他们的计算机上安装一个网络服务器(Apache)并在他们的机器上制作该应用程序运行。问题是,如果我们决定走这条路,我们必须:
- 在启动应用程序之前从 MySQL 下载所有数据
(当用户可以访问互联网时)并将此数据保存到 JSON
文件
- 更改项目中的所有查询,以便从 JSON 而不是数据库中获取数据
- 还有很多实时向数据库中插入数据的功能,所以我们不得不使用SQLite,然后
将数据传输到 MySQL 数据库
- 最后,这样,使用这个程序的人就可以访问所有 PHP 个文件,并且他们可以随时修改它们。
我们没有时间考虑真正的桌面 Java 应用程序,因为这个应用程序将从 1 月开始使用,所以我们没有时间开发它。
你有什么建议吗?有什么我没有考虑到的事情,或者可以帮助我的技术吗?
谢谢!
PS。我考虑过 PHP Desktop 的 Nightrain 之类的程序,但它们只是避免安装 Apache,仅此而已...
简介
既然你显然需要一个快速的解决方案,我会给你一个。这是基于我们所知道的信息。警告,此解决方案并不优雅,您需要在有机会时更换它。
解决方案
- 清除所有主键和外键。
- 将它们替换为带有索引的
BINARY(16)
。
每条记录都需要使用CSRNG随机生成其伪主键,二进制16只是为了方便遵循UUID标准。这将确保每条新记录保持唯一索引,尽管缺乏对其他分布的了解。
你 table 不会有主键索引,因为它们是唯一的,而且由于数据库将是分布式的,无论如何都不可能检查键的唯一性,所以没有必要使用它。
- 每台笔记本电脑都需要整个数据库的副本。
- 每台笔记本电脑只允许添加新数据,不允许删除或修改基础数据。
事实上,从现在开始,中央数据库中的所有数据通常都是write-once/read-only。无论新合并的数据有多么错误,都绝对不能删除或修改。
- 根据时间戳,新数据应被视为 "updates"。
所以每个 table 都需要一个时间戳。
- 最后,应该保留复制分发时间的记录,以保留将哪些数据合并回中央数据库的知识。
剩下的是一个中央数据库,它接收所有数据,并且数据的更改将由更新数据的存在来表示。
结论
如果我真的也有,我只会使用这个解决方案。事实上,我估计只有 80% 的可能性即使在不合格的质量下工作。它还假定您可以将所有剩余的开发时间用于数据插入方法的重构。
您将不得不面对这样一个事实,即在中央数据库上需要进行大量管理工作来管理数据的完整性,并且您需要假设您不能更改从笔记本电脑合并的输入格式。
每个新功能都需要向后兼容旧数据。
我为我的公司开发了一个 PHP 应用程序,问题是我刚刚发现该应用程序也必须离线工作。 该应用程序的工作方式如下:从 MySQL 数据库加载一些数据,然后您必须编译一些清单,将新数据插入数据库,最后生成 JSON.
该应用程序将被我们公司的很多人使用,因此我们考虑在他们的计算机上安装一个网络服务器(Apache)并在他们的机器上制作该应用程序运行。问题是,如果我们决定走这条路,我们必须:
- 在启动应用程序之前从 MySQL 下载所有数据
(当用户可以访问互联网时)并将此数据保存到 JSON
文件
- 更改项目中的所有查询,以便从 JSON 而不是数据库中获取数据
- 还有很多实时向数据库中插入数据的功能,所以我们不得不使用SQLite,然后 将数据传输到 MySQL 数据库
- 最后,这样,使用这个程序的人就可以访问所有 PHP 个文件,并且他们可以随时修改它们。
我们没有时间考虑真正的桌面 Java 应用程序,因为这个应用程序将从 1 月开始使用,所以我们没有时间开发它。
你有什么建议吗?有什么我没有考虑到的事情,或者可以帮助我的技术吗? 谢谢!
PS。我考虑过 PHP Desktop 的 Nightrain 之类的程序,但它们只是避免安装 Apache,仅此而已...
简介
既然你显然需要一个快速的解决方案,我会给你一个。这是基于我们所知道的信息。警告,此解决方案并不优雅,您需要在有机会时更换它。
解决方案
- 清除所有主键和外键。
- 将它们替换为带有索引的
BINARY(16)
。
每条记录都需要使用CSRNG随机生成其伪主键,二进制16只是为了方便遵循UUID标准。这将确保每条新记录保持唯一索引,尽管缺乏对其他分布的了解。
你 table 不会有主键索引,因为它们是唯一的,而且由于数据库将是分布式的,无论如何都不可能检查键的唯一性,所以没有必要使用它。
- 每台笔记本电脑都需要整个数据库的副本。
- 每台笔记本电脑只允许添加新数据,不允许删除或修改基础数据。
事实上,从现在开始,中央数据库中的所有数据通常都是write-once/read-only。无论新合并的数据有多么错误,都绝对不能删除或修改。
- 根据时间戳,新数据应被视为 "updates"。
所以每个 table 都需要一个时间戳。
- 最后,应该保留复制分发时间的记录,以保留将哪些数据合并回中央数据库的知识。
剩下的是一个中央数据库,它接收所有数据,并且数据的更改将由更新数据的存在来表示。
结论
如果我真的也有,我只会使用这个解决方案。事实上,我估计只有 80% 的可能性即使在不合格的质量下工作。它还假定您可以将所有剩余的开发时间用于数据插入方法的重构。
您将不得不面对这样一个事实,即在中央数据库上需要进行大量管理工作来管理数据的完整性,并且您需要假设您不能更改从笔记本电脑合并的输入格式。
每个新功能都需要向后兼容旧数据。