如何从数据库角度处理实时数据?


14

我有一个主意,但它仍然使我迷惑数据库区域

想象一下,我想显示实时数据,并使用一种最新的浏览器技术(Web套接字 -甚至使用较旧的浏览器),很容易向所有可观察对象(用户浏览器)显示每个人的工作。

雷米·夏普(Remy Sharp举例说明了这一点。

但是我仍然不了解数据库,我该如何喂食,让我们想象一下(使用Remy游戏Tron),我想在数据库中保存每个已连接用户的路径,以及客户端是否想了解发生了什么事情一个5秒的延迟,他将看到,不仅是那一刻的5秒,而且是时间的延续 ...

我如何查询这样的数据库?

SELECT x, y FROM run WHERE time >= DATEADD(second, -5, rundate);

推荐的路径不对吗?

并在x时间内拉出x ...这不是真实的数据Feed正确吗?

如果有人可以帮助我理解数据库的观点,我将不胜感激。

Answers:


7

关系数据库针对关系进行了优化。 时间序列数据库经过优化,可以存储和使用一系列随时间变化的值。在工业界,他们称这些为“历史学家”。可能最著名的是OSI的PI

您可以查询给定时间点的一组信号,即使它没有存储该特定点的值(它可以在已知点之间进行插值)。

但是,每个查询只给您一个时间点。您仍然需要投票。

继续按照时间序列数据库主题,检出openPDC(Phasor数据集中器特定于电网,但它是时间序列历史记录器)。具体来说,这句话:

流播放实用程序,可用于重播本地历史档案中的事件并提取大型数据集

确实是您想要的...某种播放机制。

我不认为您真的想要一个数据库。您需要一堆FIFO。


7

实时与数据库无关。

当我制造雷达(以及热泵和船舶控制系统)时,我了解到实时数据完全存在于缓冲区和共享内存中。

数据可以发送到数据库以进行后续分析和检索。该卷必须很小,因此它的摘要或摘要或数据样本将进入持久性存储。

但是,实际的实时数据会通过消息队列流经网络,以确保可靠性,或者通过UDP数据包进行即时(但可能是脆弱的)通知。


4

碰到这个问题,我认为您正在考虑这个错误,而其他答案并没有真正突出问题所在。

锤击数据库并不是一个好主意。虽然我很确定您已经意识到这一点,但其他人可能没有。我记得我的一个朋友试图在半实时游戏的循环中使用php脚本和Javascript AJAX函数。他很快意识到随着更多人的加入,性能下降了,这仅仅是因为他每秒执行大量查询,从而使数据库遭受重创。

以我的看法,需要在用户和数据库之间放置一个运行时间较长的应用程序。用户直接连接到该应用程序,并将其所有信息传递给该应用程序。他们会立即使用此应用将信息复制到与其连接的每个人。这将加载到一个非常轻量级的应用程序中,流量很小,而且非常实时。

如果必须使用数据库,则应用程序必须在后台更新队列中处理该数据库。显然,您需要选择要保存的内容,因为您不想用一小堆信息(例如游戏中用户的当前位置)来敲击数据库,这使您回到了开始时遇到的相同问题用。而不是位置,而是存储5秒钟以上的行驶距离或其他更有意义的信息


1

该站点具有一些“实时”功能。您会发现许多高流量站点在Web服务器和数据库之间有很多玩具。Redis是可以用来将数据保存在内存中的东西。我确定还有其他各种堆栈。

我认为Firebase.com是一种出色的实时数据服务(不知道它们对实际的数据库后端做了什么,但是由于它们为数据库后端提供了服务,因此我不确定我是否真的不在乎好奇。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.