Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据库同步期间序列化数据的优点_Python_Mysql_Database_Synchronization - Fatal编程技术网

Python 数据库同步期间序列化数据的优点

Python 数据库同步期间序列化数据的优点,python,mysql,database,synchronization,Python,Mysql,Database,Synchronization,我正在尝试开发一个系统,允许用户更新笔记本电脑上的本地脱机数据库,并在重新连接到网络时,将其数据库与主数据库同步 我查看了MySQL复制,但该文档侧重于单向同步。所以我想我要用python构建一个定制的应用程序来进行双边同步,我有几个问题要问 我已经阅读了一些关于这个问题的帖子,其中一个被被动提到的项目是序列化,我将通过python中的pickle和cPickle模块来实现它。有人能告诉我这是否必要,以及在同步数据库的上下文中序列化数据的优点吗 wikipedia的序列化条目中的一个用途是,它可

我正在尝试开发一个系统,允许用户更新笔记本电脑上的本地脱机数据库,并在重新连接到网络时,将其数据库与主数据库同步

我查看了MySQL复制,但该文档侧重于单向同步。所以我想我要用python构建一个定制的应用程序来进行双边同步,我有几个问题要问

我已经阅读了一些关于这个问题的帖子,其中一个被被动提到的项目是序列化,我将通过python中的pickle和cPickle模块来实现它。有人能告诉我这是否必要,以及在同步数据库的上下文中序列化数据的优点吗

wikipedia的序列化条目中的一个用途是,它可以用作检测时变数据变化的方法。这听起来非常重要,因为我的应用程序将查看时间戳,以确定更新主数据库时哪些记录具有优先级。因此,我想我没有真正了解python中的pickle数据如何用于检测时变数据中的更改,以及这是否会补充使用数据库中的时间戳来确定优先级或完全替代此方法

无论如何,高级解释或代码示例都是受欢迎的。我只是想弄明白

谢谢

如何使用python中的酸洗数据来检测时变数据中的更改

以不透明格式绑定数据绝对不会告诉您任何关于时变数据的信息,只是它可能已更改,但您需要通过展开数据来手动检查。这篇文章实际上说的是

引用实际相关章节:

由于序列化和反序列化都可以从公共代码中驱动,例如,微软基础类中的序列化函数,公共代码可以同时执行这两个函数,因此可以检测1个序列化对象和它们以前的副本之间的差异,和2为下一次此类检测提供输入。实际上不必构建先前的副本,因为可以动态检测差异。这是一种理解称为差异执行(一种不存在的链接)的技术的方法。它在内容随时间变化的用户界面编程中非常有用-可以创建、删除、更改图形对象,或使其处理输入事件,而无需编写单独的代码来执行这些操作

“差异执行”一词似乎是此人创造的新词,他在另一个答案中对此进行了描述:。仔细阅读这个答案,我想我明白他想说什么。他似乎将差分执行作为一个MVC风格的概念,在这样的环境中,您有很多视图小部件,比如一个网页,您希望允许增量更改只更新这些元素,而不强制全局重画屏幕。依我的拙见,我不会把这种连载称为经典意义上的连载,而不是任何延伸,而是记录过去或类似的事情。因为这基本上与序列化无关,所以我对他所描述内容的解释可能不值得你花时间,除非你对这个主题感兴趣

一般来说,避免全局重画是不可能的。全局重画有时必须发生:例如在HTML中,如果增加元素的大小,则需要回流较低的元素,从而触发重新绘制。在3D中,您需要重新绘制更新内容背后的所有内容。但是,如果遵循此技术,则可以减少(但不是最小化)重绘的数量。他声称这种技术将避免使用大多数事件,避免OOP,并且只使用命令式过程和宏。我的解释如下:

绘图函数必须知道如何擦除自身以及它们所做的任何可能影响无关函数显示的操作。 编写一个无SideEffect的paintEverything脚本,强制显示所有内容,例如使用paintButton和paintLabel等函数,除了IF宏/函数外,不使用任何东西。IF宏的工作原理与IF语句类似,除了。。。 无论何时遇到IF分支,都要记录这是哪个IF语句,以及所采用的分支。如果这是一个模糊的概念。例如,您可能决定通过将IFs与递归相结合来实现For循环,在这种情况下,我认为您需要将IF语句作为一个树来跟踪,该树的节点是函数调用或IF语句。您可以确保该树的结构与优先规则相对应。子布局选择取决于此布局选择。 每次发生用户输入事件时,请重新运行paintEverything脚本。然而 因为我们一直跟踪代码的哪个部分依赖于哪个其他部分,所以我们可以自动跳过任何不依赖于更新内容的内容。例如,如果paintLabel不依赖于按钮的状态,我们可以避免重新运行paintEverything脚本的该部分。 序列化不是真正的序列化,更像是自然序列化的数据结构,它来自if分支的执行历史。除此之外,这里的序列化根本没有必要;您所需要的只是跟踪显示代码的哪一部分取决于其他部分。碰巧的是,如果您对串行执行的智能if语句使用此技术,那么使用延迟计算的执行历史差异来确定需要更新的内容是有意义的

然而,这种技术确实有一些有用的外卖。我想说的主要收获是:跟踪依赖关系也是一件合理的事情,不仅是在OOP风格中,例如,不仅小部件a依赖于小部件B,而且是在任何DSL中编程的基本组合子的依赖关系。也可以从程序的结构推断依赖项,例如HTML

如何使用python中的酸洗数据来检测时变数据中的更改

以不透明格式绑定数据绝对不会告诉您任何关于时变数据的信息,只是它可能已更改,但您需要通过展开数据来手动检查。这篇文章实际上说的是

引用实际相关章节:

由于序列化和反序列化都可以从公共代码中驱动,例如,微软基础类中的序列化函数,公共代码可以同时执行这两个函数,因此可以检测1个序列化对象和它们以前的副本之间的差异,和2为下一次此类检测提供输入。实际上不必构建先前的副本,因为可以动态检测差异。这是一种理解称为差异执行(一种不存在的链接)的技术的方法。它在内容随时间变化的用户界面编程中非常有用-可以创建、删除、更改图形对象,或使其处理输入事件,而无需编写单独的代码来执行这些操作

“差异执行”一词似乎是此人创造的新词,他在另一个答案中对此进行了描述:。仔细阅读这个答案,我想我明白他想说什么。他似乎将差分执行作为一个MVC风格的概念,在这样的环境中,您有很多视图小部件,比如一个网页,您希望允许增量更改只更新这些元素,而不强制全局重画屏幕。依我的拙见,我不会把这种连载称为经典意义上的连载,而不是任何延伸,而是记录过去或类似的事情。因为这基本上与序列化无关,所以我对他所描述内容的解释可能不值得你花时间,除非你对这个主题感兴趣

一般来说,避免全局重画是不可能的。全局重画有时必须发生:例如在HTML中,如果增加元素的大小,则需要回流较低的元素,从而触发重新绘制。在3D中,您需要重新绘制更新内容背后的所有内容。但是,如果遵循此技术,则可以减少(但不是最小化)重绘的数量。他声称这种技术将避免使用大多数事件,避免OOP,并且只使用命令式过程和宏。我的解释如下:

绘图函数必须知道如何擦除自身以及它们所做的任何可能影响无关函数显示的操作。 编写一个无SideEffect的paintEverything脚本,强制显示所有内容,例如使用paintButton和paintLabel等函数,除了IF宏/函数外,不使用任何东西。IF宏的工作原理与IF语句类似,除了。。。 无论何时遇到IF分支,都要记录这是哪个IF语句,以及所采用的分支。如果这是一个模糊的概念。例如,您可能决定通过将IFs与递归相结合来实现For循环,在这种情况下,我认为您需要将IF语句作为一个树来跟踪,该树的节点是函数调用或IF语句。您可以确保该树的结构与优先规则相对应。子布局选择取决于此布局选择。 每次发生用户输入事件时,请重新运行paintEverything脚本。然而,因为我们已经跟踪了代码的哪个部分依赖于哪个其他部分,所以我们可以自动跳过任何不依赖于更新内容的内容。例如,如果paintLabel不依赖于按钮的状态,我们可以避免重新运行paintEverything脚本的该部分。 事实并非如此 序列化,更像是自然序列化的数据结构,来自if分支的执行历史。除此之外,这里的序列化根本没有必要;您所需要的只是跟踪显示代码的哪一部分取决于其他部分。碰巧的是,如果您对串行执行的智能if语句使用此技术,那么使用延迟计算的执行历史差异来确定需要更新的内容是有意义的


然而,这种技术确实有一些有用的外卖。我想说的主要收获是:跟踪依赖关系也是一件合理的事情,不仅是在OOP风格中,例如,不仅小部件a依赖于小部件B,而且是在任何DSL中编程的基本组合子的依赖关系。此外,还可以从程序的结构中推断依赖关系,例如HTML。

一些切题说明:1请注意,pickle模块没有任何安全保证;如果不受信任的源将直接或间接地创建数据,您将需要使用类似JSON的东西。2当使用时间戳时,事实上有时不太可能,因为分批处理会使许多条目具有精确相同的时间戳,精确到毫秒,甚至微秒。在这种情况下,您的代码不应该失败;您可能需要一个向量时钟来替换索引或修改语义。请注意,通常情况下,序列化数据库对象是一个坏主意-这违反了数据库的规范化原则,并限制了您访问数据的方式以及可以使用什么来访问数据。您通常最好将其正确地存储在数据库中;如果不受信任的源将直接或间接地创建数据,您将需要使用类似JSON的东西。2当使用时间戳时,事实上有时不太可能,因为分批处理会使许多条目具有精确相同的时间戳,精确到毫秒,甚至微秒。在这种情况下,您的代码不应该失败;您可能需要一个向量时钟来替换索引或修改语义。请注意,通常情况下,序列化数据库对象是一个坏主意-这违反了数据库的规范化原则,并限制了您访问数据的方式以及可以使用什么来访问数据。你最好把它正确地存储在数据库中。谢谢你的回答。DE是一个有趣的概念,尽管您的答案侧重于ui编程,但我认为其主要思想仍然适用于我的同步数据库问题。i、 e.当对本地从属数据库进行更改时,我需要避免重画或重新更新主数据库中的整个记录,并且只更新每个记录中的相关字段。问题是,我仍然不知道如何确定哪些更改是最新的更改。我可以序列化和比较数据,如上所述,但这只会告诉我数据已被更改…我也可以使用向量时钟,正如您在对原始问题的评论中提到的,但如果有两个脱机dbs更新同一记录,那么它们不需要共享向量时钟吗?另外,你的答案非常详尽,但是你能给我看一个使用向量时钟的简单代码示例吗?我的理解是,它几乎就像一个全局计数器,i=0,每个进程或更新都会将这个计数器增加1i++。然后,记录的最新更改将对应于记录的向量时钟的最高值。基本上就是这样吗?谢谢你的回答。DE是一个有趣的概念,尽管您的答案侧重于ui编程,但我认为其主要思想仍然适用于我的同步数据库问题。i、 e.当对本地从属数据库进行更改时,我需要避免重画或重新更新主数据库中的整个记录,并且只更新每个记录中的相关字段。问题是,我仍然不知道如何确定哪些更改是最新的更改。我可以序列化和比较数据,如上所述,但这只会告诉我数据已被更改…我也可以使用向量时钟,正如您在对原始问题的评论中提到的,但如果有两个脱机dbs更新同一记录,那么它们不需要共享向量时钟吗?另外,你的答案非常详尽,但是你能给我看一个使用向量时钟的简单代码示例吗?我的理解是,它几乎就像一个全局计数器,i=0,每个进程或更新都会将这个计数器增加1i++。然后,记录的最新更改将对应于记录的向量时钟的最高值。本质上是这样吗?