在AWS上有多达数十TB的数据,每个文件通常在0.5-2GB之间,在用matlab读取和处理这些数据时,发现读取速度极其缓慢,大大影响了后续的处理效率。
经过研究,发现有两个原因:
1.在AWS上的文件名中包含了若干中文。
虽然中文名依然可以读取,但是由于一些编码转译的原因,导致读取速度大大受限,所以在存储时,一定要尽量避免中文名,尽量用字母和数字以及允许的相关符号(如下划线)。该原因大概使得1GB的文件读取时间延长一小时左右。
2.存储的文件为csv格式,脚本中使用readtable进行读取。
readtable与load相比,其背后代码较为复杂,因为需要实现csv、txt或xlsx等文件格式的识别及转换,以及简单的数据提取处理,导致其耗时长。在不包含中文名的前提下,单个文件最高下载速度大约被限制在200-400Mpbs左右,除非通过并行计算可稍微减少该原因的影响,但是每个单核的下载速度仍然在400Mpbs以下。因此建议在用matalb存储到云端时,尽量存储为mat格式,用load进行读取。另外,经对比,用python读取AWS上的csv文件,效率极高,几乎可以认为限制源于带宽本身。
聊且记录,引以为戒。