7

正如我所探索的,Mongodb 创建的日志文件是使用 snappy 压缩算法压缩的。但我无法解压缩这个压缩的日志文件。它在尝试解压缩时出错

错误流缺少 snappy 标识符

我用来解压的python代码如下:

import collections
import bson
from bson.codec_options import CodecOptions
import snappy
from cStringIO import StringIO
try:
    with open('journal/WiredTigerLog.0000000011') as f:
        content = f.readlines()
        fh = StringIO()
        snappy.stream_decompress(StringIO("".join(content)),fh)
        print fh
except Exception,e:
    print str(e)
    pass

请帮助我在这之后无法前进

4

1 回答 1

1

Snappy 压缩有两种形式,基本形式和流形式。基本形式的局限性在于它必须全部放入内存中,因此流形式的存在是为了能够压缩更大量的数据。流格式有一个标题,然后是压缩的子范围。如果缺少标头,听起来您可能使用基本形式进行了压缩,并尝试使用流形式进行解压缩。 https://github.com/andrix/python-snappy/issues/40

如果是这种情况,请使用decompress而不是stream_decompress.

但如果可能是数据根本没有压缩:

with open('journal/WiredTigerLog.0000000011') as f:
    for line in f:
        print line

可以工作。

WiredTiger 的最小日志记录大小为 128 字节。如果日志记录为 128 字节或更小,WiredTiger 不会压缩该记录。 https://docs.mongodb.com/manual/core/journaling/

于 2017-02-20T13:07:25.620 回答