Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
项目的NoSQL建议(文本流)_Nosql_Redis - Fatal编程技术网

项目的NoSQL建议(文本流)

项目的NoSQL建议(文本流),nosql,redis,Nosql,Redis,我正在寻找一个NoSQL数据库建议。。。以下是我正在研究的内容: 我正在编写一个基于web的客户端,用于向大量消费者提供文本流(基本上是实时字幕)。一旦事情完全升级,在任何给定时刻都可能发生100多个事件。许多消费者规模较小(

我正在寻找一个NoSQL数据库建议。。。以下是我正在研究的内容:

我正在编写一个基于web的客户端,用于向大量消费者提供文本流(基本上是实时字幕)。一旦事情完全升级,在任何给定时刻都可能发生100多个事件。许多消费者规模较小(<10个),但其中一些可能相当大(10000多个同时消费者,可能更多?)

在每次活动过程中,文本将以每分钟几个单词到每分钟200多个单词的速度累积。每个消费者将运行一个web客户端(台式机/笔记本电脑/平板电脑/智能手机上的浏览器),该客户端将定期轮询尚未收到的任何文本。给定的用户也可以在发出请求之前要求提供事件的全文。已完成的活动必须保留一段时间,但将在完成后24-36小时内移除

我的第一个想法是使用Redis,它具有在数据存储中附加文本值的方法,以及从文本值末尾获取子字符串的内置支持(也就是说,客户端可以只保留接收到的最后一个字符的字符偏移量,并将其传递给客户端API,用于从事件文本中提取子字符串)。我担心,包含事件文本的字符串的增长可能是Redis的一种不寻常的用法,可能会给我带来一些问题


那么…是否有一个NoSQL DB似乎特别适合这种应用程序?有没有什么重要的理由不使用Redis来实现这种功能?

一个潜在的开放性问题是如何处理新客户机。例如,假设一个事件已经开始,有人连接了几分钟。他们需要从e开始还是刚刚开始连接

如果是后者,我建议使用消息系统,而不是将字符串附加到字符串中。一种方法是使用Redis。总体而言,这似乎更适合,尤其是在新连接一开始就不需要所有内容的情况下。对于长期存储,应使用与任何其他连接一样侦听的客户端和存档条目—最好是通过本地缓存然后在完成或正在进行时上传完成的成绩单。我会将实时需求和代码与请求历史记录和档案分开

另一种方法是使用有序集,使用输入时间的时间戳。因此,客户端只跟踪上次更新,并从该时间检索任何内容。可以找到有序集文档。此方法还提供了从成绩单中选择时间区域的功能。需要一点数学知识你甚至可以从成绩单的角度重播这件事,就好像它是现场直播的一样。如果你有成千上万的客户在每次投票中都要翻阅整个成绩单

时间戳顺序集的另一个优点是字符串编码。当使用Redis字符串时,必须使用固定宽度编码。范围是字节偏移量,而不是字符偏移量。如果您需要支持UTF-8,这可能是一个问题


第三个选项是将文本字符串附加到列表中。这与排序集类似,只是您的客户端存储最后一个索引(列表的大小)每次调查都会尝试从lastIndex+1到最后获取任何信息。

一个潜在的开放性问题是如何处理新客户机。例如,假设某个事件已经开始,有人连接了几分钟。他们是从一开始就需要所有信息,还是从连接时开始需要所有信息

如果是后者,我建议使用消息系统,而不是将字符串附加到字符串中。一种方法是使用Redis。总体而言,这似乎更适合,尤其是在新连接一开始就不需要所有内容的情况下。对于长期存储,应使用与任何其他连接一样侦听的客户端和存档条目—最好是通过本地缓存然后在完成或正在进行时上传完成的成绩单。我会将实时需求和代码与请求历史记录和档案分开

另一种方法是使用有序集,使用输入时间的时间戳。因此,客户端只跟踪上次更新,并从该时间检索任何内容。可以找到有序集文档。此方法还提供了从成绩单中选择时间区域的功能。需要一点数学知识你甚至可以从成绩单的角度重播这件事,就好像它是现场直播的一样。如果你有成千上万的客户在每次投票中都要翻阅整个成绩单

时间戳顺序集的另一个优点是字符串编码。当使用Redis字符串时,必须使用固定宽度编码。范围是字节偏移量,而不是字符偏移量。如果您需要支持UTF-8,这可能是一个问题


第三个选项是将文本字符串附加到列表中。这与排序集类似,只是您的客户端存储最后一个索引(列表的大小)每次轮询都会尝试从lastIndex+1到最后获取任何信息。

我建议继续使用Redis,看看它的性能如何。我们对每秒40K+请求的非字符串对象使用Redis,负载最小。我建议继续使用Redis,看看它的性能如何。我们对每秒40K+请求的非字符串对象使用Redisnd负载是最小的。它对新客户端的工作方式是,他们将收到一些但不一定是全部的事件文本…我们可能会提取事件文本的最后几百个字符,并在第一次请求时返回。在这一点之后,交付的只是新文本。我已经考虑了发布/订阅的可能性但是客户端在这方面是非常有限的。我们只关注web客户端,web套接字的支持不是很好