python - 用于大数据的 Python3 的 Reed-Solomon 代码
问题描述
我正在编写一个代码来使用 Reed-Solomon 代码对10MB 二进制数据进行编码。
但是,该模块会引发有关消息长度的错误,如以下警告。
ValueError: Message is too long (10032003 when max is 255)
虽然我试图理解图书馆的代码,但我无法理解代码的目的。
你能帮我解决这个问题吗?
这是我编写以下代码时的Reed-Solomon 模块。
以下代码是我制作的部分代码。
import time
import reedsolo as rs
def encoding(per, msg, n, nsym, gen):
time = 0
count = 0
rs.init_tables(0x11d)
while time < per:
temp = time.time()
rs.rs_encode_msg(msg, nsym, gen=gen[nsym])
time += time.time() - temp
count += 1
def main():
data = b"<SOME TEXT>"*5500 #This data size is 10MB
n = 8
nsym = 3 # I wanted RS(8,3)
period = 10
gen = rs._rs_generator_poly_all(n)
encoding(period, data, 8, 3, gen)
解决方案
我会建议一种类似于用于云存储的 jerasure 的方法。将数据视为一个矩阵,5 行数据,3 行 ECC(RS(8,5) 共 8 个,5 个数据,3 方),其中每行有 ncol = 10MB/5(ncol 是列数)。对每列数据单独使用 RS 代码。您可能需要考虑更多行,例如 16 行数据、4 行 ECC (RS(20,16))。
错误检测+纠正过程需要将列转换为数组并调用RS库进行编码和解码,并将结果转换回列。
您需要使用已编译的库而不是基于 python 的库,以使代码运行得足够快。使用 PSHUFB(xmm 寄存器)指令一次并行处理 16 个字节的汇编模块可以加快 X86 编译库的速度。
问题中链接到的 github 库包含一个要编译的 C 源文件,但我不知道为 python 创建 C 编译库需要哪些工具。
推荐阅读
- flutter - Flutter inpute文本字段在失去焦点时丢失文本
- python - Discord Client Bot 没有以正确的方式响应?不和谐.py
- node.js - 尝试使用 gremlin 查询更新属性(如果存在)我收到错误为“找不到名称‘有’”
- r - 如何使用另一个矩阵的列(或行)计算矩阵的每一列(或行)的加权平均值?
- nginx-reverse-proxy - 通过 nginx 暴露多个 docker 服务
- maven - 需要从 mvn 生成的插件中删除“由 maven-plugin-tools 3.5 于 2021-01-20 生成”文本
- c# - 如何在 Windows 和 Linux 上正确存储 .NET Core 非交互式应用程序凭据?
- android - startActivityForResult putExtras being recieved as NULL
- google-sheets - 在 Google 表格中使用数组公式
- visual-studio - 制作 .dll 文件时,如何在 Visual Studio 中访问不同形式的可变形式