对庞大的数据集进行排序

Posted

技术标签:

【中文标题】对庞大的数据集进行排序【英文标题】:Sorting enormous dataset 【发布时间】:2020-06-24 15:56:01 【问题描述】:

我有一个庞大的数据集(超过 3 亿个文档)。它是一个用于归档数据和回滚能力的系统。

回滚功能是一个游标,它遍历整个数据集并对一些外部端点执行少量发布请求,这是一段简单的代码。

被迭代的数据需要按时间戳顺序发送(归档在文档中)。数据库宕机了一段时间,所以使用了备份数据库,但收到了手动归档的旧数据,后来全部与主数据库合并。

较旧的数据会破坏顺序。我需要对这个数据集进行排序,但问题是大小;没有足够的 RAM 可立即执行此操作。我怎样才能实现这种排序?

PS:文档不包含任何索引字段。

【问题讨论】:

【参考方案1】:

没有索引就无法进行有效的排序。如果你在日期字段上有一个索引,那么事情就已经被排序了(从某种意义上说),所以按所需的顺序排列事情非常便宜(在索引的开销之后)。

在没有索引的情况下对所有个条目进行排序的唯一方法是为每个文档获取要排序的字段,然后在内存中对它们进行排序。

我看到的唯一不错的选择是在日期字段上创建索引(迄今为止最好的选择)或增加数据库的 RAM(昂贵且不可扩展)。

注意:由于您拥有大量文档,因此即使您的索引也可能无法实现超强可扩展性——在这种情况下,您需要考虑对数据库进行分片。 p>

【讨论】:

以上是关于对庞大的数据集进行排序的主要内容,如果未能解决你的问题,请参考以下文章

对 Delphi 数据集进行排序

按多列对数据视图中的结果集进行排序

如何在熊猫/python中的行标题中通过部分搜索对数据集进行排序

使用javascript对数据集进行排序

如何编写 sql 查询对数据集进行排序或分组

在 Scala 中对数据集 [String] 进行排序