标签: sync

基于时间戳的同步的常见缺陷是什么?

我正在实现我的第一个同步代码.在我的情况下,我将为每个用户提供两种类型的iOS客户端,它们将使用lastSyncTimestamp一个64位整数将记录同步到服务器,该整数表示上一次同步的毫秒时间内的Unix时期.可以随时在服务器或客户端上创建记录,并通过HTTP将记录作为JSON进行交换.

我并不担心冲突,因为很少有更新,并且总是来自同一个用户.但是,我想知道是否有一些我需要注意的常见问题,基于时间戳的方法可能会出错,例如在夏令时期间同步,同步冲突或其他陷阱.

我知道git和其他一些版本控制系统避免与基于内容的协商同步方法的时间戳同步.我可以想象我的应用程序的这种方法,使用uuidhash对象,两个对手宣布他们拥有的对象,然后交换它们直到两个对手具有相同的集合.

如果有人知道基于内容的同步与基于时间戳的同步的任何优点或缺点,那么这也是有帮助的.

编辑 - 以下是我为时间戳和基于内容的同步提出的一些优点/缺点.请挑战/纠正.

注意 - 我将基于内容的同步定义为两组对象的简单协商,例如,如果你给两个孩子们交换卡片的每个部分,那两个相同的两组棒球卡,并告诉他们看起来像他们一样通过他们宣布并将他们找到的任何副本交给另一方,直到他们都有相同的集合.

  • 约翰尼 - "我拿到了这张卡片."
  • 戴维 - "我收到了一堆卡片.给我那张卡片."
  • 约翰尼 - "这是你的卡片.给我一堆卡片."
  • 戴维 - "这是你的一堆牌."
  • ....
  • 两者 - "我们完成了"

基于时间戳的同步的优点

  • 易于实施
  • 用于同步的单个属性.

基于时间戳的同步的缺点

  • 时间是观察者的相对概念,不同机器的时钟可能不同步.有几种方法可以解决这个问题.在单台机器上生成时间戳,该机器不能很好地扩展并表示单点故障.或者使用矢量时钟等逻辑时钟.对于构建自己的系统的普通开发人员来说,矢量时钟可能太复杂而无法实现.
  • 基于时间戳的同步适用于客户端以进行主同步,但对于对等同步或两个主服务器可能发生同步的情况也不起作用.
  • 单点故障,无论生成时间戳.
  • 时间与正在同步的内容并不真正相关.

基于内容的同步的优点

  • 不需要维护每个对等时间戳.2个对等体可以开始同步会话并基于内容开始同步.
  • 定义明确的端点 - 当双方都有相同的集合时.
  • 允许对等体系结构,任何对等体都可以充当客户端或服务器,只要它们可以托管HTTP服务器.
  • 同步与集合的内容一起使用,而不是抽象的概念时间.
  • 由于同步是围绕内容构建的,因此如果需要,可以使用同步进行内容验证.例如,可以对内容计算SHA-1哈希并将其用作uuid.它可以与同步期间发送的内容进行比较.
  • 更进一步,SHA-1哈希可以基于以前的哈希值来维护内容的一致历史记录.

基于内容的同步的缺点

  • 可能需要实现对象的额外属性.
  • 与基于时间戳的同步相比,双方的逻辑更多.
  • 稍微繁琐的协议(可以通过同步群集中的内容来调整).

git cocoa sync ios

13
推荐指数
2
解决办法
4731
查看次数

有没有办法在计算机之间自动同步html5 localstorage

我有一个简单的离线html5/javascript单html文件Web应用程序,我存储在我的Dropbox中.这是我编写的一种时间跟踪工具,它将应用程序数据保存到本地存储.由于它是我自己使用的,我喜欢离线应用程序的便利性.

但是我有几台计算机,我一直试图想出任何一种hacky方式来同步我的各种机器之间的这个应用程序的数据(目前正在使用本地存储).

Chrome似乎允许数据同步,但仅适用于chrome扩展.我还以为我可以让网页自动保存/加载来自Dropbox文件夹中文件的数据,但似乎没有办法在没有用户提示的情况下自动与特定文件同步.

我认为"明显"的解决方案是将页面放在服务器上并将数据存储在数据库中.但是假设我不想要一个需要我在服务器上维护应用程序的解决方案 - 是否有另一种方法,无论如何hacky,凑齐同步?

我甚至找了一段时间看看是否有供应商提供网络数据库服务 - 我可以说,按需要发布/获取一小撮json,然后以某种方式让我的离线应用程序与此服务同步,但同样-origin政策似乎使该计划无效(此外我找不到这样的服务).

使用chrome,谷歌驱动器,Dropbox或其他一些我不知道的工具,是否有一个棘手/偷偷摸摸的解决方案?或者我是否设置了自己的服务器?

javascript sync offlineapps

13
推荐指数
2
解决办法
5926
查看次数

设置AVSynchonizedLayer

我一直在尝试制作一个将视频与动画对象连接起来的概念验证(实际上,我是将用户选择的位图"旋转"到特定位置的固定视频上).在观看了有关Core Animation(WWDC10等)和AVSync..Layer(Apple WWDC10示例代码,doc示例代码)的所有可用Apple资料后,根本没有足够明确的隔离代码示例来推导如何实现此正确播放模式.

使用CA,我有一个加载到CALayer中的视频资源,以及一个附加到位图的动画,然后连接到另一个CALayer.我创建了一个AVSynchronizedLayer并将这两个对象添加为子层.

当这个树被添加到UIView的图层属性时,我期望动画的播放与视频同步运行.相反,我只看到视频播放,动画永远不会执行 - 这里是我的代码的相关部分,它们都位于一个View Controller中(在ViewDidLoad中调用).

Video101.m4v =简单的m4v视频,gerald.png =位图

NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"Video101" withExtension:@"m4v"];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];

AVPlayer *player = [[AVPlayer playerWithPlayerItem:playerItem]retain];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = CGRectMake(0, 0, 1024, 768);
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

CALayer *gerald = [CALayer layer];
gerald.frame = CGRectMake(0, 0, 120, 120);
gerald.contents = (id) [UIImage imageNamed:@"gerald.png"].CGImage;

[self.view.layer addSublayer:playerLayer];
[self.view.layer insertSublayer:gerald above:playerLayer];


CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
anim.duration = 18.0;

anim.values = [NSArray …
Run Code Online (Sandbox Code Playgroud)

video animation core-animation sync ios

12
推荐指数
1
解决办法
3210
查看次数

为iCloud"管理存储"列表指定应用程序名称

iCloud在哪里获取它在iCloud首选项中显示的应用程序名称?

  • iOS版: Settings.app > iCloud > Storage & Backup > Manage Store > Documents & Data
  • OSX: System Preferences > iCloud > Manage ...

我知道iCloud会将应用程序列为"未知",最初会显示一个空白图标(这确实发生在我的情况下),但是我的应用程序现在通过其"内部"名称而不是"漂亮"名称出现在此列表中(包含iCloud的应用更新尚未提交,因此这更加奇怪).

我的直觉说该名称将被定义为我的应用程序中的部分CFBundleDocumentTypesUTExportedTypeDeclarations部分,info.plist但iCloud使用的名称仅出现在那里的UTI值中.iCloud值也不匹配应用程序CFBundleDisplayName或配置门户中附加到App ID的描述.

sync info.plist uti ios icloud

12
推荐指数
1
解决办法
1678
查看次数

如何使用Chrome同步XMPP服务器进行身份验证?

我需要在我的Java应用程序中获取当前打开的Google Chrome用户标签(而不是在同一台计算机上).Chrome同步已启用,因此当前标签与Google服务器同步.

根据Chrome同步文档,它是通过XMPP完成的.所以我想应该可以连接到Google XMPP服务器(xmpp.google.com),例如通过Smack(XMPP的Java库),验证并监听指示标签会话更改的protobuf消息.当然,用户的登录凭据或Chrome用于标识客户端的"client_id"可用.

但是我很难掌握用于连接到XMPP服务器的身份验证方法 - 我无法弄清楚它是如何在Chromium 源代码中完成的,并且除了非常低级别的注释之外没有可用的文档.代码.谷歌使用的libjingle库基于XMPP的服务仅适用于C++,并且没有很好的维护/记录.

那么有没有人曾经做过类似的事情,谁可以提供有关身份验证过程如何工作的任何建议/提示?

xmpp google-chrome sync

12
推荐指数
1
解决办法
4395
查看次数

数据库同步算法建议

我正在开发一个需要实现数据同步算法的应用程序.

我们将拥有一台主服务器和多个从属设备,这些设备需要同步在一起.

现在,我有三个算法,我想根据你们中的任何一个建议哪一个是最好的.我真的很感激你的意见.

这里可以找到算法的描述.这是韩国汉阳大学信息与通信部Sang-Wook Kim的科研论文.

http://goo.gl/yFCHG

2该算法涉及维护数据库的时间戳和版本号的记录

例如,如果一个人的移动设备和服务器上有版本v10,则v12是移动设备,假设移动设备上的当前时间戳与服务器上的时间戳相比较不新近,

如果我们用 - 表示删除,用+表示插入,用〜表示改变

以下更改日志与几个版本相关联:

v11:+ r(44),~r(45), - r(46)v12:-r(44),~r(45),+ r(47)

然后数据库的整体变化是,~r(45)(来自v12),+ r(47), - r(46)

因此可以看出,记录r(44),即使被添加,也随后被删除,不需要.因此,不需要传输冗余数据.

整个算法可以在这里找到(我把它放在pdf中)http://goo.gl/yPC7A

3这个算法有效 - 保留一个表,记录每条记录的最后一个更改时间戳.并保持行按时间戳排序.它只同步那些已经改变的行,这里唯一看到的是每次按表排序表到时间戳.

这是http://goo.gl/8enHO的链接

非常感谢您的意见!:d

database algorithm sync

12
推荐指数
1
解决办法
5582
查看次数

如何在两个git存储库之间方便地同步文件

我有两个git本地存储库.两者在不同的路径下以不同的名称共享相同的文件.目前,当我进行更改时,我必须将文件从一个目录复制到另一个目录.

是否有另一种方法可以保持同步而无需手动覆盖文件?我不想为此文件创建单独的存储库.我认为以下其中一项可行,但显然,它们不会:

  • git子模块
  • git子树
  • 符号链接软
  • 符号链接很难

那里还有什么?

unix linux git sync

12
推荐指数
1
解决办法
2371
查看次数

在Android中,联系人同步适配器应该在单独的进程中运行吗?

在我的应用程序中,我使用的是联系人同步适配器,但它有很多与主应用程序共享的信息.有适配器需要工作的设置(如登录信息和用户更改任何同步设置),所以我目前在同一个进程中运行它,并与主ap通信使用getApplicationContext(),然后我有一些共享Application同步适配器在同步过程中使用的变量.

但是在培训文档和在线的一些教程中,示例适配器被设置为在其自己的进程中运行 - 它android:process=":sync"在清单中使用.这有必要吗?如果它确实在一个单独的进程中运行,我该如何与主应用程序进行通信?

android sync contacts android-syncadapter

12
推荐指数
1
解决办法
3256
查看次数

如何跨多台计算机同步本地托管的Greasemonkey脚本?

我希望能够在我使用的所有机器上访问我的Greasemonkey脚本.我已经在Greasemonkey的设置对话框中启用了" 为用户脚本启用Firefox同步 "设置,但之后我读到它只同步外部托管的脚本.

然后我尝试使用以下方法设置同步:

  1. 我将Greasemonkey的' gm_scripts '文件夹(位于%appdata%\Mozilla\Firefox\Profiles\<profile name>)移动到OneDrive文件夹.
  2. 我在原始位置创建了一个指向上面提到的OneDrive文件夹的符号链接: mklink /D gm_scripts "%userprofile%\SkyDrive\App Profile Synching\GreaseMonkey\gm_scripts"
  3. 我在另一台机器上设置了相同的符号链接,并检查了符号链接的工作原理.

结果,我的脚本继续在原始机器中显示正常.但它们在第二台机器上根本没有显示出来.这似乎表明Greasemonkey在另一个位置有一些脚本列表.

如何解决此问题,或者有哪些其他方法可用于在多台计算机上同步我自己的Greasemonkey脚本?

firefox greasemonkey sync

12
推荐指数
1
解决办法
2341
查看次数

Android多个同步适配器项目,如Google帐户?

我目前将Android应用设置为使用Android的AccountManager功能,使用SyncAdapter和经过身份验证的帐户自动执行同步.

我只有一个同步适配器运行,它同步所有内容,但我想将其分开,以不同的间隔执行不同内容的同步.

我如何拥有像Google这样的多个同步项?

Google帐户截图

android sync accountmanager android-syncadapter

11
推荐指数
1
解决办法
2947
查看次数