【发布时间】:2017-02-01 09:52:50
【问题描述】:
我有一个包含数百万个项目的数据库。这些项目可通过 Web 界面导出。客户可以指定一个模板(字符串),其中包含关于如何导出数据的占位符。
由于数据集非常大,我无法在模板上进行简单的搜索/替换并将结果作为响应发送,因为这会消耗我的记忆。所以我通过 Transfer-Encoding: chunked 流式传输响应。
模板可能如下所示:
Some static content at the beginning …
[foreach item]{item.id} {item.name}[/foreach]
Some static content in between the loops …
[foreach item]{item.id} {item.value}[/foreach]
Some static content at the end …
如何按顺序流式传输?如果只有一个 foreach 循环,我可以简单地将流式处理分为三个阶段:
- 逐行循环播放内容。
- 遍历循环并逐行流式传输每个项目。
- 逐行循环播放内容。
但是,模板可能包含 0..n 个 foreach 循环(基于相同的项目列表)。是否有一个正则表达式可以提取所有循环及其之间的内容,以便我可以迭代它们?
【问题讨论】: