我正在尝试为具有数千页的大型网站动态生成站点地图。
是的,我考虑过离线生成站点地图文件并简单地静态提供它,我最终可能会这样做。但我认为这是一个普遍有用的问题:
如何从 Wicket 中的数据库流式传输大数据?
我按照 Wicket SEO page 上的说明进行操作,并且能够使用 DataProvider 获得动态站点地图实现。但它不能扩展 - 当它调用我的 DataProvider 的 iterator()
时,它会耗尽内存带有 count
的方法arg 等于我要返回的对象的总数,而不是分 block 迭代它们。
我认为解决方案在于 WebResource/ResourceStreamingRequestTarget
.但是这些类期望 IResourceStream
,最终归结为提供 InputStream
实现,它处理字节,而不是数据库记录。我不知道如何实现 length()
这种情况下的方法,因为这需要提前访问每条记录来计算总长度。
最佳答案
从 IResourceStream.length() 方法的文档:
/**
* Gets the size of this resource in bytes
*
* TODO 1.5: rename to lengthInBytes() or let it return some sort of size object
*
* @return The size of this resource in the number of bytes, or -1 if unknown
*/
long length();
因此,我认为如果您的 IResourceStream 实现告诉您长度未知并且您在从数据库中获取记录时直接流式传输数据,那将是可以的。
关于stream - wicket:如何从数据库中流式传输资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287385/