【发布时间】:2018-04-23 17:01:03
【问题描述】:
上下文
您好,
有一天,我偶然发现了 RethinkDB,我对整个实时更改的东西着迷。为了学习如何使用这个工具,我快速启动了一个运行 RethinkDB 的容器,并开始制作一个小项目。我想做一些非常简单的事情,因此我想创建一个服务,让演讲者可以创造空间,观众可以提问。其他用户可以对问题进行投票,以便让演讲者知道哪一个是最好的。显然,这个项目有很多实时需求,我认为使用 RethinkDB 最能满足这些需求。
设计
我想为此使用一组不同的特定工具。后端使用 Laravel Lumen,前端使用 Vue.JS,数据库当然是 RethinkDB。
问题
尽管不存在安全问题,但 RethinkDB 似乎并非旨在直接向最终用户公开。
假设用户只需要实时查看问题和投票,则不需要写入权限,并且如果用户更改房间 ID,则不会发生任何不好的事情,因为房间都是可公开访问的。
因此,需要一些东西来等待数据更新并通过套接字将其推送到客户端(例如 socket.io 或推送器)。
鉴于后端是用 PHP 编写的,我无法告诉 Lumen 保持清醒并等待数据更新。根据我从在线教程中看到的内容,应该使用一个辅助系统来监听更改然后推送它们。 (比如说一个 node.js 服务)
这是可以理解的,但是我坚信这种将数据传输给用户的方式效率低下,并且违背了 RethinkDB 的目的。
如果我必须从客户端计算机发送操作(用户提出问题),将其保存到数据库中,有一个脚本来监听更改,然后将更改推送到 socket.io,最后有客户端(vue .js) 在新事件到来时采取行动,首先拥有实时数据库有什么意义?
只需让 Lumen 应用程序将事件直接推送到 socket.io 并使用任何其他数据库系统,我就可以避免所有这些令人头疼的问题。
我真的无法理解这一切的意义。我对 no-sql 数据库没有任何经验,但我真的很想尝试一下。
谢谢。
【问题讨论】: