使用较低的RAM大小进行高容量数据处理,无需标准java库

使用较低的RAM大小进行高容量数据处理,无需标准java库,java,bigdata,Java,Bigdata,在其中一次技术讨论中,我被要求提供以下场景的解决方案,而不使用任何处理类似情况的标准java库 如何处理不适合JVM可用内存的数组 如何处理一个大文件,比如说20 gb的文件,而这个文件不适合存储在可用内存中 我可能会想到以下解决办法 获取数组的长度,并使用部分长度处理数组(对于长度为/4的数组上的ex 4迭代) 原始文件可以使用split命令(或者在各自的操作系统环境中使用类似的命令)拆分为多个部分。处理单个较小的文件并生成中间结果(例如数据聚合)。完成单个文件处理后,根据中间结果文件的最终大

在其中一次技术讨论中,我被要求提供以下场景的解决方案,而不使用任何处理类似情况的标准java库

  • 如何处理不适合JVM可用内存的数组
  • 如何处理一个大文件,比如说20 gb的文件,而这个文件不适合存储在可用内存中
  • 我可能会想到以下解决办法

  • 获取数组的长度,并使用部分长度处理数组(对于长度为/4的数组上的ex 4迭代)
  • 原始文件可以使用split命令(或者在各自的操作系统环境中使用类似的命令)拆分为多个部分。处理单个较小的文件并生成中间结果(例如数据聚合)。完成单个文件处理后,根据中间结果文件的最终大小,一次性处理所有结果文件或再次应用迭代处理
  • 然而,我想知道是否有更好的方法。此外,如果此类问题不适合本论坛,请让我知道,我将删除该问题。
    虽然我发现一些谷歌文章中有一个解决方案,但它谈到了一些库已经提供的解决方案,因此将其发布在这里。

    一个解决方案可能是堆外内存。可以映射到直接内存或磁盘。你可以从这里得到一些灵感
    一种解决方案可能是堆外内存。可以映射到直接内存或磁盘。你可以从这里得到一些灵感

    您认为在过去的日子里,这是如何做到的,只有很少的内存,但有足够的存储空间?这是你描述的一个例子。这在很大程度上取决于“过程”的含义。如果“进程”是这样的,通过数据的一条线性路径就足够了,那么这比对数组元素进行任意和随机访问要容易得多。我可以知道为什么问题的计数为负数吗?欢迎使用StackOverflow!这个问题在这里问起来很好,因为你可以在这里读到。你认为在非常古老的时代,这是如何做到的,只有很少的内存,但有足够的存储空间?这是你描述的一个例子。这在很大程度上取决于“过程”的含义。如果“进程”是这样的,通过数据的一条线性路径就足够了,那么这比对数组元素进行任意和随机访问要容易得多。我可以知道为什么问题的计数为负数吗?欢迎使用StackOverflow!这个问题在这里很好回答,因为你可以在这里读到。如果你想很好地扩展,试着去耦合存储和计算。您可以根据读写模式查看各种云存储或开源数据库(sql或nosql)。如果您不熟悉CAP theorm,请阅读一些有关它的内容。如果您想很好地扩展,请尝试将存储和计算解耦。您可以根据读写模式查看各种云存储或开源数据库(sql或nosql)。如果你不熟悉CAP-theorm,可以读一读。