Node.js 如何跨web和本机应用程序实现数据结构到多个客户端的单向同步?

Node.js 如何跨web和本机应用程序实现数据结构到多个客户端的单向同步?,node.js,firebase,synchronization,open-source,Node.js,Firebase,Synchronization,Open Source,我们需要在后端服务器、web客户端、本机iOS应用程序和本机Android应用程序之间共享一个通用数据结构。后端服务器是用NodeJS编写的,并在下面使用Postgres数据库 我曾经考虑过Firebase实时数据库,因为它可以解决后端可以写入Firebase数据库以及所有客户端都可以使用该数据库的所有需求 我的问题是,是否有一种开源的替代方案可以开箱即用,并且比成熟的Firebase实时数据库更符合我们的要求,后者将提供许多我们不需要或不想要的功能 ---以下是假设和要求-- 后端充当主控端,

我们需要在后端服务器、web客户端、本机iOS应用程序和本机Android应用程序之间共享一个通用数据结构。后端服务器是用NodeJS编写的,并在下面使用Postgres数据库

我曾经考虑过Firebase实时数据库,因为它可以解决后端可以写入Firebase数据库以及所有客户端都可以使用该数据库的所有需求

我的问题是,是否有一种开源的替代方案可以开箱即用,并且比成熟的Firebase实时数据库更符合我们的要求,后者将提供许多我们不需要或不想要的功能

---以下是假设和要求--

  • 后端充当主控端,因此对数据结构的更改只能由后端执行

  • 数据结构可以假设为一个简单的键值对列表、一个简单的对象数组或一个像json对象那样的完整的树结构。我们可以使用所有的解决方案

  • 数据结构的大小将非常有限,比如小于100KB

  • 对服务器上数据结构的任何更新都应该以近乎实时的方式传播到订阅数据结构的所有客户端

  • 如果客户机脱机一段时间,它应该在连接后立即更新

  • 每种类型的客户端都必须有一种健壮的方式来订阅数据结构中的更改。因此,一旦更新了数据结构的本地版本,同时应将更改的内容通知它

  • 如果可能,客户机在收到数据结构更新通知时,应该知道“数据结构的一部分”已经更新

  • 我们希望编写尽可能少的代码,并且更喜欢一个解决方案,该解决方案具有用于NodeJ的服务器库和用于web、本机iOS和本机Android的客户端库

  • 本机应用程序无法请求推送通知的权限

  • 它必须适用于任何支持WebSocket或类似功能的现代浏览器


  • 有趣的问题。我不知道有哪个开源系统能做到这一点,我相信Firebase本身就是从这样一个叫做Parse的系统演变而来的。现在,我可以告诉你的是Firebase是一个可靠的选择,也许你不应该这么快就放弃它:

  • Firestore是新的数据库系统。实时数据库将被逐步淘汰。firestore在功能上更为优越

  • Firebase是免费启动的,并且达到了非常高的级别,然后是相当便宜的

  • 它被管理好了。这一点的重要性怎么强调都不过分。保护或维护系统并不是你的问题,如果你推出自己的解决方案的话

  • 它可以自动扩展,这意味着,计划容量、购买、滚动或同步额外的服务器、或管理内存或磁盘都不是您的问题。这一切都是为了你

  • “您可能不需要的功能”节省了大量的时间和成本,如与不同提供商的托管身份验证、移动推送通知、分析、文件存储等

  • 它有web和移动客户端,因此您可以开发所需的客户端并共享同一后端

  • 也就是说,我能问一下你为什么问这个问题吗?我非常熟悉Firebase,我可能可以帮助您完成部署


    干杯

    Firebase几乎完成了所有这些,所以问题是;为什么不直接使用Firebase实时数据库或FireStore?我发现这个比较似乎与我的问题非常相关:@Jay我担心供应商锁定、未来成本失控等等。另外,我不需要双向同步,所以我觉得应该有一个非常简单的解决方案,它是一些围绕WebSocket或保持活动http连接构建的简单库;说Firebase很难导航、无组织、很难查询,而且你的数据很容易被删除,这是不太准确的(在大多数数据库中三次点击删除数据可能会发生),所以我不会读太多。(海事组织!)。供应商锁定对于任何提供API的后端数据库都是一个问题。Parse就是一个很好的例子。如果一个应用程序是精心设计的,那么所有的数据都会被包装起来,你会被锁在里面,而不需要重新编写。所以,探索一下FB,看看你喜欢它吗。Firebase与Parse无关,它们有一种截然不同的方法,但通常都是一个很好的答案。哈哈,没错,我认为它是它的前身,但很高兴你喜欢我的答案:答案为PThx@SergioFlores。我问这个问题的动机可以看作是对我原来问题的一种评论。@NikolaSchou我已经阅读了你发布的比较。首先,什么是过度杀伤力?没有这样的事。这是一个灵活的工具,设计用于正常变化的早期启动动态。供应商锁定?嗯,不是真的,如果你需要一些不同的东西,是因为你有钱让它发生。