我必须在 Java 中处理一个大的字符串数组,它不能保存在内存中。正因为如此,数组必须分几个块处理。每个块的大小可以由程序的用户指定,但如果用户没有指定大小,程序必须决定最合适的大小。
我的第一个想法是使用像 cassandra 这样的磁盘数据库。这样,每次我想处理一大块大数组时,我都会查询数据库。我看到的问题是我需要控制 JVM 和 RAM 的可用内存,我认为这太难了。此外,我必须弄清楚如何设置每个块的大小以充分利用可用内存而不填充它。
为此,我考虑过使用 MemCached 或 SSDB 之类的东西(Redis 的替代品,它允许您将数据库的一部分存储在磁盘中 - https://github.com/ideawu/ssdb),但我不确定如果这是最好的选择。这个想法是 Memcached 或 SSDB 将有助于管理内存和磁盘之间的数据交换,而我不必实施任何控制来避免填充内存。
真的,我不太喜欢添加依赖项(Memcached 或 SSDB)只是为了让我的程序正常运行的想法。
然后,我的问题是:有没有什么好的方法可以解决我的问题?前面的推理错了吗?
提前致谢!
澄清---------------
你需要做什么样的处理? 处理与使用现有数据(在大数组中)获取信息的数据分析技术有关
阵列有多大?弦有多大?您的处理是随机访问还是顺序访问?为什么不能只使用文件? 数组的大小可以改变,它没有固定值。这个想法是用户(不是最终用户)可以在需要时以块的形式处理数组。例如,一个用户可能想要在几个块中处理一个大小为 100.000 的数组,而其他用户不需要在几个块中处理一个数组,而数组的大小小于 1.000.000(取决于内存的大小每个用户)。我的处理是顺序的。我不使用文件,因为在此页面的其他问题中建议最好使用数据库而不是文件。而且,如果我使用一个文件,我必须控制可用的内存空间,
您要处理的字符串在哪里?它们是否已经存储在某个地方,或者您是否以某种方式即时生成它们? 字符串是从用户那里获得的,它们完全存储在一个数组中。现在,想法是将用户传递的字符串存储到数据库中,稍后(当用户决定时)将完成对字符串的处理(不必在将字符串存储到数据库后立即进行)。