在一般从流接收数据写入介质的场景中,大部分存在每批次数据较小,导致小文件较多的问题.
一般考虑设置一个缓冲池,将多个批次的数据先缓冲进去,达到一定大小,再一次性批量写入
//公共缓冲池和缓冲池大小,如果并发情况下,需要考虑加锁
//符合条件时就写入一次,否则数据只是写入缓冲池
private static final int SIZE=10485760;
private static final ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); public synchronized static void flush(String tableName, List<byte[]> bytes) {
for (byte[] aByte : bytes) {
try {
byteBuffer.write(aByte);
} catch (IOException e) {
e.printStackTrace();
}
}
if (byteBuffer.size() >= SIZE) {
//使用当前日期生成object key
Date now = new Date();
String nowStr = dateFormat.format(now);
doFlush(fileName, byteBuffer.toByteArray());
byteBuffer.reset();
} }
对应的python版本
def put(filename, str):
pass
if __name__=='__main__':
str0 = ''
for i in range(10000000):
str0=str0+str
if len(str0.encode())>10485760:
put(i,str0)
str0=''