我正在设计一个需要非常快的批量数据加载器实用程序。输入是某种格式的一个或多个文件,包含要加载到高性能分布式系统的数据。为简单起见,我们假设只有一个文件,但这个想法应该很容易推广到多个磁盘上的多个输入文件。
我们知道硬盘是串行设备,只有在顺序IO时才能发挥最大性能。后端分布式系统更强大,可以让我同时从多个磁盘加载数据。
我的想法是这样的:
每个文件我有一个生产者线程,它读取大块,解析 block 以识别单个记录,然后“重新分区并发送”每条记录到其关联的内存容器。重新分区将基于每条记录的一个或多个属性(考虑根据每个人的 ID 重新分区)。
有多个内存容器保存中间记录。每个容器都绑定(bind)到一个消费者线程,该线程一次从其容器中获取一条记录,并将其加载到后端系统。
我的问题是:
如何设计一个功能来将每条记录“重新分区并发送”到其关联的内存容器中?
如果每个消费者线程对其容器中的一批记录进行排序,然后在一次调用中加载它们,会怎样?内存容器的良好数据结构是什么?
请分享您的专业知识。如果您能详细说明并提供一些伪代码,那就更棒了!谢谢。
最佳答案
这很像 MapReduce任务。如果您可以将类似 Hadoop 的基础架构安装到您的分布式系统,那么这应该很容易完成。
关于java - 如何在 Java 中重新分区文件中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24284509/