javascript - Chrome扩展中IndexedDB的同步解决方案

标签 javascript google-chrome-extension indexeddb

我开发了一个 chrome 扩展,它使用 IndexedDB 在本地保存数据。我想添加一个功能来在多台计算机之间同步数据。你能给我建议一个解决方案吗?谢谢

编辑:我不维护任何服务器,也不收集任何用户的私有(private)信息。该扩展基本上是来自免费第三方的数据的混搭。因此,如果我的用户对计算机 A 中的数据进行任何更改,它也应该反射(reflect)在计算机 B 或设备 C 中(用于将来的待办事项支持:)

最佳答案

更新:根据您的编辑,我相信 Deni Mf 先生的链接是实现点对点工作的一个很好的指南。但我相信该技术尚未可用于一般用途,并且您可能最好与服务器同步,甚至可能是允许您执行此操作的第三方(Amazon S3 和/或类似服务)。 Chrome 已经内置了一些同步服务 - How to synchronize Chrome extension data on different computers? - 但您只能将其用于少量数据,因此实际上这些只能是指向其他地方托管的真实数据的指针。

原始答案如下:

您需要弄清楚几个方面。首先,当您说“多台计算机”时,这是否意味着多台计算机与同一组服务器通信,或者您实际上是指对等意义上的多台计算机(每台计算机既是客户端又是服务器) .

其次,你需要一个同步机制和协议(protocol)。如果一切都很好,每个人都受到信任,没有真正的 secret 并且正在运行,那么您至少会面临一些挑战;在某种私有(private)网络上,您很可能使用 CouchDB 或类似的东西,它开箱即用(但一旦您尝试向数据添加身份验证和授权就变得具有挑战性)。如果没有,您需要自己推出。

假设您有客户端与一组特定的服务器(使用 HTTP 或类似的)进行通信,并且假设您不能使用 CouchDB 或类似的服务器(出于上一段所述的原因),那么自行部署并不太难。由于数据库行(或类似的行)可以在任何客户端或服务器上创建,因此使用传统的串行整数主键很可能不值得,并且您需要使用 UUID 或类似的唯一键(因此每台计算机都可以创建自己的主键) - 假定唯一 - 任何对象的键)。为包含“更新”时间戳(创建或更新对象时)的每一行至少添加一列,并添加另一个包含上次同步时间戳的数据库。每当客户端连接时,请向服务器询问自上次连接以来的任何更新,并向服务器发送自上次连接以来您在本地创建的任何更新。删除行之类的事情有点棘手,因为删除的行没有“更新”时间戳,因此请考虑向每行添加一个简单的“删除”标志以使事情变得更简单。

这至少应该足以让你继续前进。

关于javascript - Chrome扩展中IndexedDB的同步解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867204/

相关文章:

javascript - 如何使用 JavaScript 显示从数据库正确检索的日期

javascript - jQuery:循环遍历 "Select"下拉列表的 20 个不同 ID 以在更改时执行函数

javascript - 新创建的dom元素不能拖动

google-chrome-extension - 扩展程序图标上传到Chrome网上应用店后丢失

javascript - 在 Chrome 扩展的 iframe 中使用 Twitter Bootstrap JS

javascript - ajax成功后jQuery继续循环执行

google-chrome-extension - 首次使用 chrome.storage.sync.get 的选项问题

javascript - 使用 autoIncrement 时删除 IndexedDB 中的项目

javascript - 如何从 indexedDB 回调中安全地修改全局变量?

indexeddb - 我可以将视频作为 blob 存储在 indexedDB 中吗?