这个库为实现擦除代码提供了一个简单的python接口。为了获得最佳性能,底层的擦除代码算法是用C语言编写的。

pyeclib的Python项目详细描述


这个库为实现擦除代码提供了一个简单的python接口。 我们知道它可以与python v2.6、2.7和3.x一起工作。 性能方面,库使用了liberasurecode,这是一个基于c的擦除 代码库。

pyeclib支持多种擦除编码后端,包括 由jerasure[1]提供的reed solomon实现,liberasurecode[3], 英特尔的isa-l[4]和phazr.io的libphazr。它还为公寓提供支撑 基于xor的编解码器(liberasurecode的一部分)-一类hd 基于“存储系统中基于平面异或的擦除码”的组合码: 结构、有效恢复和权衡”,见IEEEMSST2010[2])。 这些代码非常适合存档用例,有一个简单的结构 并且在单个磁盘期间需要最少数量的参与磁盘 重构(想想基于异或的lrc代码)。


安装

安装先决条件:

  • python 2.6、2.7或3.x(包括开发包)、argparse、setuptools
  • 自由代码v1.3.1或更高版本[3]
  • 擦除代码后端库、gf complete和jerasure[1]、[2]、isa-l[4]等

安装依赖项:

debian/ubuntu主机:

$ sudo apt-get install build-essential python-dev python-pip liberasurecode-dev
$ sudo pip install -U bindep -r test-requirements.txt

RHEL/CENTOS主机:

$ sudo yum install -y redhat-lsb python2-pip python-devel liberasurecode-devel
$ sudo pip install -U bindep -r test-requirements.txt
$ tools/test-setup.sh

如果要确认所有依赖项包都已成功安装,请尝试:

$ sudo bindep -f bindep.txt

note:目前,对于ubuntu,repo包中的liberasurecode dev比v1.2.0早。 对于centos,请确保安装最新的openstack cloud sig repo 才能安装最新可用版本的liberasurecode-devel。

安装pyeclib:

$ sudo python setup.py install

包括运行测试套件:

$ ./.unittests

如果测试套件因为找不到任何共享库而失败, 那么您可能需要将/usr/local/lib添加到加载时搜索的路径 图书馆。最好的方法(在Linux上)是将“/usr/local/lib”添加到:

/etc/ld.so.conf

然后确保运行:

$ sudo ldconfig

开始

“工具”目录中提供了使用pyeclib的示例:

命令行编码器:

tools/pyeclib_encode.py

命令行解码器:

tools/pyeclib_decode.py

确定重建丢失片段所需内容的实用程序:

tools/pyeclib_fragments_needed.py

一个配置实用程序,帮助比较可用的EC方案 性能和冗余:

tools/pyeclib_conf_tool.py

pyeclib初始化:

ec_driver = ECDriver(k=<num_encoded_data_fragments>,
                     m=<num_encoded_parity_fragments>,
                     ec_type=<ec_scheme>))

支持的ec_type值:

  • liberasurecode_rs_vand=>;vandermonde reed solomon编码,仅限软件后端,由liberasurecode[3]实现
  • jerasure_rs_vand=>;vandermonde reed solomon编码,基于jerasure[1]
  • jerasure_rs_cauchy=>;高加索里德所罗门编码(Jerasure变体),基于Jerasure[1]
  • flat_xor_hd_3flat_xor_hd_4=>;基于平面异或的HD组合代码,自由代码[3]
  • isa_l_rs_vand=>;英特尔存储加速库(isa-l)-simd加速擦除编码后端[4]
  • isa_l_rs_cauchy=>;柯西里德所罗门编码(isa-l变体)[4]
  • shss=>;日本NTT实验室擦除编码库[5]
  • libphazr=>;phazr.io内置隐私的擦除代码库[6]

代码维护

这个库目前主要由openstack swift社区维护。 有关问题或任何其他帮助,请在freenode上的openstack swift中询问。


参考文献

[1]Jerasure,支持存储应用程序中擦除编码的C库,http://jerasure.org

[2]Greenan,Kevin M等人,“存储系统中基于平面异或的擦除码”,http://www.kaymgee.com/Kevin_Greenan/Publications_files/greenan-msst10.pdf

[3]自由代码,用于擦除编码后端的C API抽象层,https://github.com/openstack/liberasurecode

[4]英特尔(R)存储加速库(开源版本),https://01.org/intel%C2%AE-storage-acceleration-library-open-source-version

[5]Kota Tsuyuzaki,tsuyuzaki.kota@lab.ntt.co.jp>;,“NTT SHSS擦除编码后端”

[6]Jim Cheung,support@phazr.io>;,“内置隐私的phazr.io libphazr擦除代码后端”

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要在环境或系统属性中指定类名,或者作为小程序参数,或者在应用程序资源文件[springtest]中指定类名   使用流映射java 8转换另一个列表中的列表   docusignapi如何使用java将信封状态更改为“void”?   java Hibernate“提供的id类型错误,预期为Long,Get class DelayedPostInsertIdentifier”异常   升级Tomcatembed版本后java Basic登录身份验证失败   java如何将第三个元素作为循环从数组中删除?   playframework 2.0注销流程正在运行!框架2.0,java   java如何读取hadoop顺序文件?   java如何循环json并在上下文中发布每个索引   爪哇树深度   java多线程场景中的多线程列表更新   java遗传算法:请求优化   java jersey http客户端自定义请求方法   Ubuntu 12.04上带有openjdk 6的java NullPointerException   java如何获取页面上动态显示的复选框的ID   如果以D/M而不是DD/MM的形式输入日期或月份,则将前导零添加到日期字段   java Apache Oltu+Microsoft Integration OAuthProblemException{error='invalid_request',description='missing required parameters',包含无效的   java JsonWriter IOException不完整文档   java无法对非静态字段(操作侦听器)进行静态引用