我有一个存储数据的主 django 服务器(mysql 数据库)。
在线:我希望许多用户在他们的笔记本电脑(sqlLite DB)上同步该数据库的副本(必须复制增量)
离线(用户无权访问主服务器):用户可以查看和更新其本地数据库。
Back to Online : 用户笔记本电脑上的修改被同步回主 django 服务器。
我认为,因为我有 2 种数据库,我需要在 django 对象级别进行同步。有没有 django 应用程序这样做?如果没有,您将如何编写这样的功能?
我有一个存储数据的主 django 服务器(mysql 数据库)。
在线:我希望许多用户在他们的笔记本电脑(sqlLite DB)上同步该数据库的副本(必须复制增量)
离线(用户无权访问主服务器):用户可以查看和更新其本地数据库。
Back to Online : 用户笔记本电脑上的修改被同步回主 django 服务器。
我认为,因为我有 2 种数据库,我需要在 django 对象级别进行同步。有没有 django 应用程序这样做?如果没有,您将如何编写这样的功能?
原来我在 Django 中运行这样的系统。
这不是一个完整的答案,只是当前正在解决(大部分)问题的答案。
我们在使用这个简单的系统时遇到的问题很少,这也很有帮助,因为内容被正确分类并且编辑器只创建/编辑一组不重叠的类别。
我和一些人谈过这个问题,并提出了几个解决方案:
希望这在某种程度上有所帮助。如果有人决定实施这一点,我很乐意听取他的意见。
我构建了一个 Django 应用程序来执行此操作。在应用程序的远程/笔记本电脑版本上创建模型实例时,它们被标记为脏并获得一个临时 ID。远程应用程序会定期检查与主服务器的连接。当有网络连接时,即应用程序在线时,它会从主服务器为每个新的脏模型实例获取一个永久 id。临时 id 替换为永久 id,然后将脏实例同步到主实例。
我使用 Django REST 框架来接收和更新主服务器上的脏模型实例。
请注意,这还需要在离线计算机上运行本地 Web 服务器。我为此选择了 CherryPy。
好吧,我实际上不知道是否有一个 django 应用程序可以做到这一点,但我会这样进行:
为“offline_update”创建一个方法:连接到服务器的数据库,选择所有 id 与本地数据库中的对象匹配的对象。您更新本地数据库。然后选择其余条目,并将它们添加到本地数据库
为“online_update”创建一个方法相同的例程,倒置。
PRO:易于实现(Objects.all() 为您提供一切,然后您操作和更新,或直接保存)
缺点:竞争条件(如果 2 个用户更新同一个条目(不一定在同一时间)怎么办?谁有最新的条目?)
您基本上创建了一种“mysql-svn”来保持 2 个数据库的更新。
我对你的问题投票 +1,因为它真的很有趣。我一直通过转储数据库(通过 mysql)然后加载到本地数据库来工作。不使用 django。