Mel*_*tis 4 real-time nosql rethinkdb
问候,
有一天,我偶然发现了 RethinkDB,我对整个实时变化的事情非常着迷。为了学习如何使用这个工具,我快速启动了一个运行 RethinkDB 的容器,并开始制作一个小项目。我想做一些非常简单的事情,因此我考虑创建一项服务,让演讲者可以创造空间,观众可以提问。其他用户可以对问题进行投票,以便让演讲者知道哪一个是最好的。显然,这个项目有很多实时需求,我相信使用 RethinkDB 可以最好地满足这些需求。
我想为此使用一组不同的特定工具。后端将用 Laravel Lumen 制作,前端用 Vue.JS 制作,数据库当然将是 RethinkDB。
尽管不存在安全问题,但 RethinkDB 似乎并不是为了直接暴露给最终用户而设计的。
假设用户只需要实时查看问题和点赞,则不需要写入权限,并且如果用户更改房间 ID,也不会发生任何不良情况,因为房间都是可公开访问的。
因此,需要一些东西来等待数据更新并将其通过套接字推送到客户端(例如socket.io或pusher)。
鉴于后端是用 PHP 编写的,我无法告诉 Lumen 保持清醒并等待数据更新。从我从在线教程中看到的情况来看,应该使用辅助系统来监听更改然后推送它们。(例如,以 Node.js 服务为例)
这是可以理解的,但我坚信这种将数据传输给用户的方式效率低下,并且违背了 RethinkDB 的目的。
如果我必须从客户端计算机发送操作(用户提出问题),将其保存到数据库,有一个监听更改的脚本,然后将更改推送到 socket.io,最后得到客户端(vue.js)当新事件到来时采取行动,首先拥有实时数据库有什么意义?
我可以通过让 Lumen 应用程序将事件直接推送到 socket.io 并使用任何其他数据库系统来避免所有这些头痛。
我真的无法理解这一切的意义。我对 no-sql 数据库没有任何经验,但我真的很想尝试一下。
谢谢。
这是可以理解的,但我坚信这种将数据传输给用户的方式效率低下,并且违背了 RethinkDB 的目的。
RethinkDB 没有内置机制将数据传输给最终用户。它也没有访问控制(传统意义上的)。正如您所说,常见的方法是启动一个/多个运行 socket.io 的节点实例。在每个实例上,您都可以监听 RethinkDB 更改流并使用 socket.io 的广播功能。这将是一种常见的方式,但由于 RethinkDB 的流经过了相当优化,您还可以为每个传入的 socket.io 连接打开一个更改流。