当处理大批量的数据时,不仅要考虑算法的正确性,也要关注程序实现的健壮性,如果发生存储资源不足等类似的问题时,你做如何的应对?
在专利搜索中,有一个叶子节点的处理器,是对输入的文本分词,并统计词的频率,记录其所有出现的位置(包括段号、句号、句内位置号),词及其统计信息可被称为一个factor,该处理器就是把文本变换成这样一个factor序列。原来使用数组来存储这个序列(为的是可以随机存取),并且不做预先扫描来确定其精确的存储空间,就开了个最大值——文本中词语的个数(为了时间上的效率考虑)。但今天早晨发现,有一个说明文本在 10M 以上,其词语的个数以百万计,而在当时我的机器运行环境下,申请内存空间的操作造成了程序的崩溃。
也就是说,作为内核部分,要为健壮性而设计,必须考虑这个factor序列的存储机制,如果内存空间不够怎么办?毕竟,对于该处理器来讲,输入是可以任意大的。
一个教训。