当数据库 API 不支持流式处理时,如何处理大型数据集的内存问题?



我正在努力在我们的应用程序框架中通过 REST 公开数据,并且需要处理可以无限制/偏移量地查询数百万个对象的情况。数据库 API 不支持流式处理,这在不久的将来不会改变。处理这种情况的最佳方法是什么?

到目前为止,我有几个选择:

  • 实现我们自己的批处理机制。因此,从外部,客户端只是请求我们拥有的所有内容,但在内部,我们使用限制和偏移量进行批处理。我们确实有唯一的标识符,因此我们可以使用这些标识符进行排序。
    • 缺点是数据损坏的风险很小。我们的框架支持自引用,例如有人会检索所有类型为 Person 的对象。人员 ID 500 是指人员 ID 1500。检索批次 1-1000 时,人员 500 是指人员 1500。这些数据被流式传输出去。然后删除 ID 为 1500 的人员,并更新 ID 为 500 的人员的引用。检索了批次 1001-2000,但人员 1500 丢失。人员 500 的数据已经流式传输出去,现在即使在一个流中数据也无效。
  • 设置检索的最大对象数,并让客户端处理批处理,包括处理上述数据损坏的方案。
  • 什么都不做,只是让应用程序内存不足。让使用该平台的开发人员不要公开大型表,绝对不要公开给匿名用户。

不过,我希望听到一些替代方案。

我做了更多的研究,但认为没有合适的解决方案。最后,我们确实设法在数据库层中进行了所需的更改,以便能够流式传输数据。其他一切都会有太重要的缺点。

最新更新