django数据库同步以供离线使用 [英] django database synchronization for an offline usage

查看:75
本文介绍了django数据库同步以供离线使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个主django服务器,用于存储数据(mysql数据库).

I have one master django sever where the data are stored (mysql database).

在线:我希望许多用户在他们的笔记本电脑(sqlLite DB)上同步同步此数据库的副本(仅复制增量)

Online : I would like many users to have a copy from this database synchronized (only delta's must be copied) on their laptops (sqlLite DB)

离线(用户无权访问主服务器):用户可以查看和更新​​其本地数据库.

Offline (users do not have access to the master server) : users can view and update their local database.

返回在线:在用户笔记本电脑上修改的内容将同步回django主服务器.

Back to Online : what has been modified on users laptops is synchronized back to the master django server.

我认为,由于我有2种数据库,因此需要在Django对象级别进行同步.有Django的应用程序这样做吗?如果没有,您将如何编码这样的功能?

I think,as I have 2 kind of database, I need to synchronize at django object level. Is there a django application doing that ? If not, how will you procced to code such a feature ?

推荐答案

原来我正在Django中运行这样的系统.

Turns out that I'm running a system like this in Django.

这不是一个完整的答案,仅是当前正在(主要)解决问题的答案.

This is not a complete answer, just the answer that is currently solving (mostly) the problem.

  • 使用UUID作为主键.这大大减少了不同对象的主键冲突.
  • 使用Django的序列化框架进行数据交换.中央管理站点可以选择将更改列表中的选定对象下载到Django兼容的序列化文件中.然后,用户可以脱机并启动本地管理站点,然后在那里上传序列化的文件.完成脱机版后,将使用相同的过程,在脱机"管理站点中将对象序列化为文件,然后将其上载到中央管理站点.
  • 序列化框架非常有用,因为您可以获取一个实际的(未保存的)对象,然后决定是否保存它,并在保存之前修改某些字段.

这个简单的系统给我们带来了很少的麻烦,由于对内容进行了正确的分类,而且编辑者仅创建/编辑了一组不重叠的类别,因此也为我们提供了帮助.

We have run into very little trouble with this simple system, also helped since the content is properly categorized and the editors only create/edit a non overlapped set of categories.

我已经和一些人讨论过,并提出了几种解决方案:

I have talked with this with some people, and proposed me several solutions:

  • 使用时间戳记字段:该帮助决定要保存哪个版本和要丢弃的版本.
  • 使用版本字段,其中包含市长和次要版本号.较小的编辑(例如拼写更正)仅更新次要版本号,而重大更改将更新市长版本号并将次要版本设置为0.这样,在进行比较时,您始终知道哪个优先级更高.但是,这需要编辑用户中的教育和惯例.
  • 对象更新.一个单独的模型,用于存储来自脱机编辑的更新.然后,首席"编辑器将它们合并到实际对象中,并借助一些其他管理员视图来查看差异(使用google-diff-match-patch等).还可以将对象标记为允许直接更新,即,不存储更新,并在到达时直接应用它们.不便之处在于,首席"编辑必须审查所有更新,这取决于要更新的​​信息量.

希望这会有所帮助.如果有人决定实施其中的某项功能,我将很乐意听取他的意见.

Hope this helps in some way. If anyone decides to implement something of this, I'll love to hear from him.

这篇关于django数据库同步以供离线使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆