我们在ES集群中索引了数十亿条记录,每个文档都包含帐户ID,事务ID,用户名等字段(少数自由文本字符串数据字段)
我的应用程序将根据一些用户搜索参数查询ES(例如,在X和Y日期之间返回用户'A'的事务以及其他一些过滤器),我想将响应数据存储/导出到csv / excel文件。
对于我的用例,从ES返回的文档数量可能是100或数百万,我的问题是从ES导出“大量”数据的各种方法是什么?
这些请求是“实时”请求而不是批处理(例如,请求的用户正在等待创建导出的文件)。
我读到了分页(大小/来自)和滚动方法,但不确定这些是从ES导出大型数据集的最佳方法。 (如果我正确读取,大小/来自接近的最大设置为10K,并且对于实时用例不推荐使用滚动选项。)
想知道专家。
答案 0 :(得分:0)
如果您的用户需要导出大量数据,您需要教育他们不要期望导出是实时完成的(为了您的其他用户和系统的健康)。
这绝对是一个批处理工作。用户通过UI触发导出,然后某些进程将被唤醒并异步执行。完成后,您通知用户某个位置可以下载导出,或者您通过电子邮件发送该文件。
举一个例子,当您想要从Twitter导出数据时,您会触发一个请求,并且您稍后会收到通知(即使您的帐户中只有几条推文),您的数据也会被通知导出。
如果您决定继续这样做,那么任何事情都不会阻止您使用扫描/滚动方法。