使用池化机制的双向文件同步化

使用池化机制的双向文件同步化

Georgii KapanadzeTechnical Leave a Comment

介紹

对有同步各种系统的文件管理,如Dropbox、微软OneDrive或微软SharePoint感兴趣吗?让我来介绍一下文件和文档双向同步的一些基本原则、最佳实践,如何减少开发时间和当然的财务成本。

你需要什么?

从一开始,你就需要照顾到你想要同步的每个系统的应用程序接口(API)。要处理认证,学习模式表示和原理,数据操作,并将其带入一种通用语言。这可以通过开发人员努力学习数百页的文档来实现,也可以通过一个集成平台来实现。

碰巧,我们提供的集成平台具有相当独特的技术,所以你可以考虑查看更多关于我们的。 Connect Bridge.该软件允许你使用简单的SQL(标准查询语言)使用各种系统的API。而且不管你是.NET或Java或任何其他语言的开发人员。模式在Connect Bridge的Query Analyzer工具中可视化,开发者可以在这个工具中测试他的查询并立即看到结果。然后你只需要控制数据库跟踪变化就可以了。

汇集机制

池化机制原理非常简单:每隔一个指定的时间段或用户操作时,从目标系统中检索并处理一次数据。就是这样。

优势

并非所有的系统都提供了在文件改变后实时触发动作的可能性。如果其中一个系统不提供这个功能,可能会引起严重的并发症。因此,主要的优势是控制数据和文件同步的时间。它能让你对正在发生的事情有一个更大的了解,并为避免不必要的操作提供可能性。

缺点

一个池子之间的时间越长,文件之间发生冲突的机会就越大。

冲突处理

在双向同步中,当系统之间相互修改时,可能会发生同一文件在不同系统中同时被修改的情况。但这时会发生什么呢?哪一个是正确的版本?在这种情况下,你需要指定哪个系统是主系统,哪个是从系统,以决定哪个版本将被覆盖。

核心方案原则

改变认识

为了跟踪变化,你需要有一个数据库,其中包含已经同步的目标系统的映射项目。更新的识别可以通过修改时间或版本或目标系统提供的任何可用的东西。创建或删除很简单:如果项目的记录在数据库中不存在,则为新项目;如果项目在目标系统中不存在,但在数据库中有记录,则在目标系统中被删除。就是这样。有些系统可以要求在指定的时间段内进行更改,但无论如何,你必须跟踪由于目标系统或连接失败而导致的同步。

文件同步引擎

为了让主同步逻辑与目标系统配合,最好为每个目标系统创建一个Provider类,并实现通用接口,指定基本的CRUD(Create-Read-Update-Delete)操作。那么在核心算法中,你就不需要关心哪一个是哪一个。你只需要创建双向同步的一般逻辑,Provider类会自己处理操作。如果实现了一个好的核心算法,你同步多少个系统都无所谓。你可以直接添加其他提供者的实现。这个算法需要遵循主从的层次结构,以便正确处理冲突。如果你按优劣排序的对子进行同步,应该是没有问题的。

绩效

你不能过多地影响创建和修改操作,但最重要的部分是数据检索。不需要检索所有的数据,可以保留最后一次文件同步时间,只要求服务器提供较新的创建和修改时间的项目。你可以保留最后的文件同步时间,只要求服务器提供较新的创建和修改时间的项目。删除操作取决于服务器的逻辑。有些服务器提供批量删除操作。另外,如果整个文件夹都被删除了,而服务器逻辑又要删除被删除项中的所有子项,那么逐个删除是没有意义的。

数据一致性安全

首先,在代码地方从不同的地方检索数据不是一个好主意,因为如果你把它划分在长期持久的操作之间,比如上传文件,同时用户可以改变系统的内容,你将在相同的程序上下文下使用不同的数据,这将导致严重的麻烦,可能导致数据丢失。

在这个过程中,可能会发生各种你无法影响的异常,如目标系统的内部服务器错误或连接丢失等。最好的做法是将异常处理划分为独立的单元,涵盖可能尝试运行到所有操作完成,但不继续下一个单元的代码。这有点像一个层次树。我给你举个例子:你的同步发现在第一个系统中创建的5个文件夹中有10个文件。所以它将开始在其他系统中创建这5个文件夹,但是其中一个插入操作抛出了一个异常。它可以尝试创建另外4个文件夹,但不应该开始插入文件,因为有两个文件的路径不存在。它可以用不同的和更复杂的方式来处理,但相信我,要尽可能地保持简单。在多个系统的双向同步中,可能出现的错误情况的变化数是非常大的,而且是递归的。


你觉得这篇文章有用吗?

加入我们超过6000个订阅者的新闻通讯,了解来自系统集成和商业软件世界的最新新闻!

100% 隐私。我们不发送垃圾邮件。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.