我使用Google可以脱机使用应用程序(我知道Gears是不推荐的)。我面临的问题是与服务器上的数据库同步。
具体问题是主键,或者更准确地说,是外键。当将信息发送到服务器时,我可以很容易地忽略主键,生成新的密钥。但我怎么知道这些关系是什么。
我想到了一个解决方案,打赌我需要为每个客户保存所有的pk。将多个客户端与一个服务器db同步的最佳方法是什么。
编辑:
我一直在考虑这个问题,我想,几个主键并不是最好的解决方案,但是还有什么其他的可能性呢?以时间为基础似乎不对,因为碰撞可能会发生。
我想到了一个吉德,这是个选择吗?在javascript中生成GUID似乎并不那么容易。
我可以用自然键或复合键做一些事情。正如我所想的,这看起来是最好的解决方案。我能预料到会有什么问题吗?
发布于 2010-03-12 22:45:40
这不是一个完整的答案,但至少可以给你一些想法.
您所问的问题(以及您试图解决的问题)并不是专门针对Google的,它仍然适用于其他解决方案,如HTML 5或基于系统或Flash/Air。
在几个月前的上一次ZendCon中,有一个关于这个主题的介绍--幻灯片可以在slideshare:与浏览器同步的规划-本地数据库上获得
通过这些幻灯片,你会看到一些关于可能出现在你脑海中的可能性的笔记(有些确实出现在你的脑海中,或者在另一些答案中):
当然,每个人都有优势.缺点--我不会复制--粘贴它们:看看幻灯片;-)
现在,在你的情况下,哪一种解决方案将是最好的?很难说,实际上--你越早想到同步,它就越好/更容易:当应用程序仍处于设计阶段^^时,向应用程序中添加内容要简单得多。
首先,确定是否:
那你们要同步什么?
还有一个我们通常不会想到的具体问题--直到它发生:特别是如果您的同步过程需要一些时间(如果您有大量的数据,如果您不经常同步,.),,如果它还没有完成时停止同步怎么办?
例如,如果:
在大多数情况下,拥有半同步的数据可能不太好.
因此,您也必须找到解决这个问题的方法:在大多数情况下,同步必须是原子的!。
发布于 2010-03-06 13:39:32
我想出了以下解决方案:
每个客户端都从服务器获得一个唯一的id。在引用主键的任何地方,我都使用带有客户端id的复合键和自动增量字段。
这样,这种组合是独一无二的,而且很容易实现。唯一剩下的就是确保每个客户都有一个独特的身份证明。
我刚刚发现了一个缺点: SQLite不支持复合主键上的自动增量,所以我必须自己处理id。
发布于 2010-03-13 04:06:39
我会使用类似的设置,你的最新答案。但是,为了避免自动增量问题,我将在主数据库中使用一个自动增量代理键,然后存储客户端主键和客户端id。这样,您就不会丢失或更改流程中的任何数据,您还将跟踪数据最初来自哪个客户端。
确保还在客户端Pk上设置了唯一的索引,即客户端Id,以启用来自任何子表的引用完整性。
https://stackoverflow.com/questions/2372138
复制相似问题