【问题标题】:What is the checksum algorithm in SQLite WALSQLite WAL 中的校验和算法是什么
【发布时间】:2016-07-04 09:03:37
【问题描述】:

我想知道 SQLite WAL 模式下的校验和算法 我已经检查了 doc 文件,但它是这样说的(这张图片是在 sqlite doc 文件https://www.sqlite.org/fileformat2.html#section_4_1 中捕获的)

我不明白“帧头的最后 8 个字节中的校验和值与 WAL 头的前 24 个字节和前 8 个字节和内容连续计算的校验和完全匹配是什么意思直到当前帧(包括当前帧)的所有帧“

我想更清楚地理解。

谢谢。

【问题讨论】:

    标签: sqlite checksum wal


    【解决方案1】:

    next section of the documentation 说:

    校验和算法

    通过将输入解释为偶数个无符号 32 位整数来计算校验和:x(0)x(N)。如果 WAL 标头的前 4 个字节中的幻数是 0x377f0683,则 32 位整数是大端的,如果幻数是 0x377f0682,则整数是小端的。无论使用哪种字节顺序计算校验和,校验和值始终以大端格式存储在帧头中。

    校验和算法仅适用于长度为 8 字节的倍数的内容。换句话说,如果输入是x(0)x(N),那么 N 必须是奇数。校验和算法如下:

    s0 = s1 = 0
    for i from 0 to n-1 step 2:
       s0 += x(i) + s1;
       s1 += x(i+1) + s0;
    endfor
    # result in s0 and s1
    

    输出s0s1 都是使用逆序斐波那契权重的加权校验和。 (最大的斐波那契权重出现在被求和的序列的第一个元素上。)s1 值跨越序列的所有 32 位整数项,而s0 省略了最后一项。

    【讨论】:

    • 谢谢,但我想知道如何比较 WAL 帧头的最后 8 字节、24 字节 WAL 头、前 8 字节和所有帧的内容之间的校验和。我想确切地知道前 8 个字节是什么意思?是否意味着帧内容的 8Bytes?
    • @JongHyeokPark 非常受欢迎,如果得到答案,您可以将其标记为正确。
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2011-05-13
    • 2010-11-09
    • 2011-05-11
    • 1970-01-01
    • 2011-12-08
    • 2021-05-11
    相关资源
    最近更新 更多