【发布时间】:2012-03-22 02:57:00
【问题描述】:
我正在尝试开发一个系统,允许用户更新笔记本电脑上的本地离线数据库,并在重新连接到网络后,将他们的数据库与主数据库同步。
我查看了 MySQL 复制,但该文档侧重于单向同步。因此,我想我将在 python 中构建一个自定义应用程序来执行此操作(双边同步),我有几个问题。
我已经阅读了几篇关于这个问题的帖子,其中一个被动地提到的项目是序列化(我将通过 python 中的 pickle 和 cPickle 模块来实现)。有人可以告诉我这是否有必要,以及在同步数据库的上下文中序列化数据的优势吗?
维基百科关于序列化的条目中的一个用途是,它可以用作“一种检测随时间变化的数据变化的方法”。这听起来很重要,因为我的应用程序将查看时间戳以确定在更新主数据库时哪些记录具有优先权。所以,我想我并没有真正得到的是如何使用 python 中的酸洗数据来“检测随时间变化的数据的变化”,以及这是否会补充使用数据库中的时间戳来确定优先级或替换它完全方法。
无论如何,我们都欢迎高级解释或代码示例。我只是想弄清楚这一点。
谢谢
【问题讨论】:
-
一些无关紧要的注意事项: 1) 请注意,pickle 模块不做任何安全保证;如果不受信任的来源将创建数据(直接或间接),您将需要使用 JSON 之类的东西。 2) 当使用时间戳时,许多条目将具有完全相同的时间戳(低至毫秒,甚至可能是微秒)并非不可能(实际上有时很可能,由于批处理)。在这种情况下,您的代码不应失败;你可能需要一个矢量时钟来替换索引,或者修改你的语义。
-
请注意,一般来说,为数据库序列化对象是一个坏主意——它违背了数据库的规范化原则,并限制了您访问数据的方式,以及您可以使用什么来访问数据。最好将其正确存储在数据库中。
标签: python mysql database synchronization