- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在当今世界,许多计算机、移动设备或网络服务共享数据或充当枢纽,同步变得更加重要。众所周知,同步的解决方案并不是最舒适的解决方案,最好根本不同步。
我仍然很好奇您将如何实现同步解决方案以在多个实体之间进行同步。已经有很多不同的方法,比如比较更改的日期字段或哈希并使用最新数据,或者让用户选择他想在发生冲突的情况下使用的内容。另一种方法是尝试自动合并冲突数据(在我看来这不是很聪明,因为机器无法猜测用户的意思)。
无论如何,在开始实现同步之前,我们应该回答几个与同步相关的问题:
还有很多其他问题,我希望我能给你足够的启发。同步是一个相当普遍的问题。一旦找到了一个好的、通用的同步方法,将它应用到具体的应用程序中应该会更容易,而不是从头开始思考。我意识到已经有很多应用程序试图解决(或成功解决)同步问题,但它们已经相当具体并且没有对一般的同步方法给出足够的答案。
最佳答案
在我工作的地方,我们开发了主要(网络)应用程序的“离线”版本,以便用户能够在无法访问互联网的地方使用笔记本电脑工作。当用户返回主站点时,他们需要将离线输入的数据与我们的主应用同步。
所以,回答你的问题:
- What is the most recent data? How do I want to represent it?
我们在每个表上都有一个 LAST_UPDATED_DATE 列。服务器跟踪同步发生的时间,因此当离线应用程序请求同步时,服务器会说“嘿,只给我自该日期以来更改的数据”。
- What do I do in case of a conflict? Merge? Do I prompt and askthe user what to do?
在我们的例子中,离线应用程序只能更新所有数据中相对较小的一个子集。当每条记录同步时,我们检查它是否属于这些情况之一,如果是,那么我们比较在线和离线记录的 LAST_UPDATED_DATE。如果日期不同,那么我们还会检查值(因为如果它们都更新为相同的值,则不会发生冲突)。如果存在冲突,我们会记录差异,设置一个标志表明至少存在一个冲突,然后继续检查其余细节。一旦该过程完成,如果设置了“isConflict”标志,用户就可以转到显示差异的特殊页面并确定哪些数据是“正确”版本。然后将此版本保存在主机上,并重置“isConflict”标志。
- What do I have to do when I don’t want to get into an inconsistentstate?
- How do I resume a current sync that got interrupted?
好吧,我们从一开始就尽量避免进入不一致的状态。如果同步因任何原因中断,则 last_synchronisation_date 不会更新,因此下一次同步开始时,它将从与上一次(中断的)同步的开始日期相同的日期开始。
- How do I handle data storage (e.g. MySQL database on a web service, CoreData on an iPhone; and how do Imerge/sync the data without a lot ofglue code)?
我们在两个应用程序上使用标准数据库,在两者之间使用 Java 对象。对象被序列化为 XML(并压缩以加速传输)以用于实际的同步过程,然后在每一端解压缩/反序列化。
- How should I handle edits from the user that happen during the sync(which runs in the background, so theUI isn’t blocked)?
这些编辑将在同步开始日期之后进行,因此在下一次同步之前不会在另一端获取。
- How and in which direction do I propagate changes (e.g. a user createsa „Foo“ entry on his computer anddoesn’t sync; then he’s on the go andcreates another „Foo“ entry; whathappens when he tries to sync bothdevices)? Will the user have two „Foo“entries with different unique IDs?Will the user have only one entry, butwhich one?
这由您决定如何处理这个特定的 Foo...即取决于 Foo 的主键是什么以及您如何确定一个 Foo 是否与另一个相同。
- How should I handle sync when I have hierarchical data? Top-down?Bottom-up? Do I treat every entryatomically or do I only look at asupernode?
同步是原子的,因此如果一条记录失败,则整个过程被标记为未完成,类似于颠覆提交事务。
- How big is the trade-off between oversimplifying things and investingtoo much time into the implementation?
我不太确定您的意思,但我想说这完全取决于您的情况以及您要同步的数据类型/数量。设计和实现流程可能需要很长时间,但这是可能的。
希望对您有所帮助,或者至少给您一些想法! :)
关于database - 在多个实体之间同步数据最聪明、最简单的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2092327/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!