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