我有一个我在Python3.4中开发的科学应用程序,它使用struct包生成我在分析后面的步骤中使用的条目的紧凑二进制表示。这些结构存储在一个大的二进制文件(300+ Gb)中,我调用缓存文件。此缓存文件已排序和编制索引。该文件的索引很容易适合内存,并进行二进制搜索,以找到缓存文件中的位置,我应该开始顺序读取缓存文件以检索所需的条目。此外,这些条目“引用”另一个缓存文件(基本缓存文件),我必须从缓存文件中为每个检索到的条目检索另一个条目,这个较小的基本缓存文件通常小于1GB。这是通过寻找条目指定的位置并读取该位置的条目来实现的。
此实现正常工作,但我花了大部分运行时进行磁盘访问,我想最小化这个。我无法显着改变应用程序的设计,但我可以控制硬件的配置方式。我目前正在使用5个Samsung 950专业版的条带LVM,其中包含缓存和基本缓存。我没有硬件raid控制器,我使用的是CentOS6,系统有256GB的RAM。我经常使用相同的缓存和基本缓存文件运行多个分析实例。我不知道我用当前解决方案实现的队列深度。
有没有人有关于如何优化此任务的存储配置的任何提示?我假设在文件中搜索受IOPS的限制比数组的总带宽更多。在Python中搜索一个数组的随机性能比顺序更多吗?将基本缓存放在单独的设备上是否谨慎? Ramdisk可能是一个选项,但我想尽可能避免这种情况。在这种情况下,较小的条纹尺寸是否比较大的条纹尺寸好?
我目前正在排列数组,条带大小和文件系统的某些组合,但一些指导将最大限度地减少测试的可能性。