2

我有大量数据,因此无法在内存中保存所有数据,并且总是出现内存不足错误;很明显,其中一种解决方案是在Node.JS中使用流式传输;但是根据我的分析,流式传输是不可能的(这是我应用于我的数据的功能之一)是否有任何算法可能分而治之算法,我可以用于流和排序的组合(这是我的数据上应用的功能之一?)在排序时流式传输大数据

+0

取决于您要显示的数据。它是否显示在列表中?为什么不使用分页? –

+1

@KirillSlatin它是一个对象数组!正如我所说,我不能保存所有的数据在内存和排序(至少我会说基于朴素的算法),你需要在内存中的所有数据!你是否使用分页无关紧要;换句话说,排序需要所有的数据,你不能应用排序只是部分数据(这是我的问题,是否有可能?是否有任何算法来应用排序数据的部分,通过使用流或分页结果?) – user385729

+1

你从哪里得到这些过量的数据?数据库?我想你不太懂分页的概念......服务器的请求应该包含排序字段,它们的顺序,页码和页面大小。服务器排序并返回一小部分结果 –

回答

1

您可以使用Kinesis流数据并使用Kinesis Client Library ,或subscribe a Lambda function to your Kinesis stream并逐步维护已排序的物化视图。在哪里存储排序的物化视图以及如何划分数据取决于您的应用程序。如果无法存储整个排序的物化视图,则可以使用滚动视图。如果您的数据是时间序列的,或者具有其他自然顺序,则可以将您的订购属性的范围分成块。然后,例如,您可以对数据进行1天或1小时的排序。换句话说,选择允许您根据需要将信息保存在内存中的排序细分。

+0

非常感谢您介绍亚马逊的这款超酷服务!所以主要的问题是我无法在内存中保存这个大的已排序物化视图,也没有必要将它保存在内存中;如果我理解正确,仍然需要使用Kinesis,我需要在内存中保存排序后的结果,这会逐渐变得越来越大,是吗?我理解正确吗?理想的解决方案是从Kinesis这样的服务中排序结果并将其流式传输到响应中,因为它不会在内存中保留它...您的帮助表示赞赏... – user385729

+0

我更新了我的答案以解决分块问题物化视图。 –