[百度分享]BZFS—一种透明压缩文件系统

baiduforum 2010-03-15 11:53:31
加精
简介
随着数字技术的发展,网络所包含的信息量也与日俱增,如何高效存储这些数据成了很多互联网公司的一大难题。与此相关的出现了很多的压缩工具,这些算法可以使固有的资源存储的数据量大幅度提高。但是这些压缩工具都需要用户编程调用API接口或手工执行压缩命令,因此给编程和应用造成很多不便。
 为此百度系统部研发了BZFS,一种实现透明压缩功能的文件系统,文件的压缩和解压由文件系统完成。这种方式可以使用户在不修改程序和应用的情况下减少磁盘空间的使用量,扩大单机存储容量。同时通过对I/O流程的优化,大大提高了文件的顺序读写性能。
 BZFS和硬件压缩卡一起使用还可以大规模减少数据压缩时对系统cpu的消耗。该文件系统适用于有大规模数据压缩存储需求的地方。
功能介绍
        支持文件透明压缩
对于存储在BZFS上的文件实现透明压缩,即不需要用户干预并且不影响用户以及程序对文件内容的访问;
 
        支持gzip压缩算法
系统采用gzip算法进行压缩加压,保证压缩过程不会膨胀;
 
        支持不同大小的压缩窗口
可以通过增加压缩窗口大小来增大文件的压缩比;
 
        同时支持CPU压缩和硬件压缩;
既可以选择使用CPU压缩,也兼容硬件压缩卡的接口函数,可以通过不同的mount选项选择使用的压缩方式,数据的读取对两种方式都兼容;
 
        实现对ext2文件系统的兼容
对于已经使用的ext2分区,可以直接挂载为BZFS使用,不需重做文件系统,原来的数据照常访问,新写入的数据进行压缩。
 
简要性能数据
        压缩比
        文本文件
  文件平均大小 压缩比 Cpu idle
软件压缩 391754 KB 25.9% 73%
硬件压缩卡压缩 764553 KB 50.6% 98%
二进制文件
暂无数据.
 
        顺序读
顺序读磁盘带宽140M/s, 平均请求450sectors。大文件顺序读完成时间为ext2的50%。

        顺序写
  
由该表可见,BZFS配合硬件压缩卡使用,有效节省了存储空间占用和读耗时。

目前BZFS和硬件压缩卡已经在百度若干技术领域和产品中使用。
...全文
1248 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
linleili6688 2010-05-24
  • 打赏
  • 举报
回复
试试账户
coolfire2007 2010-05-21
  • 打赏
  • 举报
回复
学习+支持
验证码识别 2010-03-25
  • 打赏
  • 举报
回复
up
up
wolf2064 2010-03-25
  • 打赏
  • 举报
回复
mark+up
junjiew 2010-03-24
  • 打赏
  • 举报
回复
顶贴试账号。
Pro_ah 2010-03-23
  • 打赏
  • 举报
回复
Up Up
Up UP
hellodota121 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhanghlsky 的回复:]
这种透明的压缩技术感觉好像是一种新的文件系统!
不过还没用过!
不知道到底啥效果!
听起来这个主意不错!
加油!
[/Quote]
up
hl122 2010-03-22
  • 打赏
  • 举报
回复
正好需要研究一下 谢谢楼主
普通网民 2010-03-22
  • 打赏
  • 举报
回复
zxy1531 2010-03-22
  • 打赏
  • 举报
回复
高高高
chaplinchan 2010-03-21
  • 打赏
  • 举报
回复
hahahahahah播放
awperpvip 2010-03-21
  • 打赏
  • 举报
回复
mark
macklau 2010-03-21
  • 打赏
  • 举报
回复
知道了,用硬件实现数据的压缩与解压,提高存储与通信资源的利用率
senda456 2010-03-21
  • 打赏
  • 举报
回复
谁有抓 包软件.
senda456 2010-03-21
  • 打赏
  • 举报
回复
怎么这么不好懂呀.
senda456 2010-03-21
  • 打赏
  • 举报
回复
参考一下.研究一下.
wss123wss 2010-03-21
  • 打赏
  • 举报
回复
这么强
jokerdx 2010-03-20
  • 打赏
  • 举报
回复
学习了~~~~~~~~~~~~~~~~~~`
liaomingdong 2010-03-20
  • 打赏
  • 举报
回复
不懂不懂,只是路过探个头。
jbz001 2010-03-20
  • 打赏
  • 举报
回复
没听说过。
加载更多回复(38)
Hibernate的检索方式:(查询/加载) 1. 通过OID加载 session.get(Users.class, 1); * 2. 通过HQL/SQL 检索 hibernate query language (面向对象的查询语言) * a) 不再操纵表,它操纵的是持久化类的对象 b) 面向对象的 3. QBC ( query by criteria ) 更加面向对象 4. QBE ( query by Example ) 5. SQL Hibernate的检索策略: 1. 延迟检索(加载)映射文件中改变lazy a) Lazy的取值: i. Many-to-one 1. false 2. proxy 3. no-proxy ii. set 一对多 1. true   2. false   3. extra 根据对set容器的不同,可以产生高效的sql访问数据库 2. 批量检索:batch-size=3 a) 可以使用批量检索: b) 在内存中,如果有多个set(代理)容器需要初始化, 则当访问任何一个代理set容器时,一次初始化n个set容器,减少sql语句; c) 产生的语句是:select * from ….. where FK in (?,?,?... …n); 3. 迫切(fetch)左外连接检索: a) 在映射文件中设置:fetch(抓取) i. Select 什么都不做 ii. Subselect 当访问内存中的一个代理容器时,一次将所有的set容器用一个子查询,全部初始化 iii. Join 1. 对OID检索方式有用 2. 对hql检索方式没有用 b) 在hql中要使用迫切左外连接时,必须加 left join fetch 对象.关系属性 i. 如果不加fetch关键字,则hibernate不会抓取关系属性,但会遍历关系属性所对应的表 ii. 不加fetch关键字时,select 要指定返回的对象,否则它要返回数组 iii. 条件:持久化类之间有关系属性映射 Hibernate级联操作对象的关系属性: 映射文件中设置: 1. Cascade a) none b) Save-update 当使用session的api对当前对象进行save,update操作时,对它的关系属性也进行save或者update c) Delete d) All = delete + save-update e) Delete-orphan 只是删除父子关系的子对象 f) All-delete-orphan 父子关系的表设为此值,表示,当删除一个父对象时,将这个set容器中的子对象全部删除 2. Inverse 只能在set映射时使用;它的作用是:是否根据set容器中存放的对象,产生update语句,维护关系(子)表的外键属性;取值为true时,将不产生update语句。当inverse设为true时,通过父亲增儿子时,必须建立双向关系. Session的一级缓存:(相当于一系列的map容器,它是需要维护的) 1. 提高效率 2. 维护缓存中的对象和数据库中对应表的记录之间进行同步 3. 当一级缓存中的对象状态(属性)发展生改变时,session在特定的时刻清理缓存: a) 清理缓存的时间点: i. Transaction.commit(); 事务提交时 ii. Session.flush(); 4. 管理session一级缓存的方法 a) Session.evict(obj)从session的一级缓存中移出一个对象 b) Session.clear() 将一级缓存中的所有对象全部清空 c) Session.close() 关闭一个session 对象的状态和对象的生命周期: 持久化类的对象,在hibernate应用中可以处于三种状态(根据对象和session之间的关系进行划分): 1. 临时态,瞬态:特点: a) 在数据库中没有记录和它对应 b) 和session没有任何关系 c) New 出来的对象,都处于临时态 2. 持久态:特点: a) 处于session的一级缓存中 b) 数据库中有一条记录和它对应 c) Session会在特定的时刻(清理缓存时)维护这个对象和数据库中的记录进行同步 d) 在同一个session的缓存中,具有相同OID的持久态对象,只有一个(同一个session的一缓存中,不可能同时有两个OID相同的同一个持久化类的对象存在) 3. 游离态,脱管 a) 不在一级缓存之中 b) 数据库可能有记录和它对应,也可能没有记录和它对应 c) 从一个持久态对象转化过来的,从session的一级缓存中出来的,因为调用了session的一些方法,产生了这种对象(session.close()) SessionFctory: Hibernate映射一对多关系: public class Dept implements java.io.Serializable { // Fields private Integer deptid; private String deptname; private Integer deptnum; private Integer actNum; private Date cdate; private Set emps = new HashSet(0) ; //getter/setter方法 略… } 映射文件: Hibernate映射多对一: public class Emp implements java.io.Serializable { private Integer empid; private Dept dept; private String empname; //getter/setter方法略 } Hibernate映射一对一(通过主键实现一对一的关系) //主PO对象(一个员工对个应一个身份证) public class Employees implements Serializable{ private Integer empid; private String name; private String sex; private Date birthday; private Double salary; //关系属性: private Idcard idcard; } … 属性映射略 //子PO对象 public class Idcard { private Integer empid; private String cardno; private String addr; private String fzjg; private Date enddate; //关系属性 private Employees emp; } emp Hibernate映射一对一(通过外键实现一对一的关系) 子表引用主表的主键做外键,这个外键建立了unique约束、not-null约束 //主对象: public class Dept implements java.io.Serializable { private Integer deptid; private String deptname; private Integer deptnum; private Integer actNum; private Date cdate; //关系属性 private Phonenote phonenote; } <-- …property 映射略 --> 子对象 public class Phonenote implements java.io.Serializable { // Fields private Integer phonid; private Dept dept; private String phonecode; } Hibernate映射多对多(两个一对多实现多对多) 表:材料表和产品表多对多,在数据库中有中间表即产品材料表用来存放两个表之间的关系 Java类:材料PO,产品PO,中间PO,中间PO的复合主键类(由于是两个一对多形成的多对多,所以,这里只讲一个一对多,另一个是相同的映射方法) //产品类: public class Product { private Integer cpbh; private String cpmc; private String gg; private String sh; private String nbxh; private String txm; private String bzfs; private Set proMals = new HashSet(0); } <-- property 映射略 --> 中间PO public class ProMal { private ProMalId id; } 复合主键类: public class ProMalId implements Serializable{ private Product product; private Clzb clzb; } Hibernate映射多对多(两个PO类直接实现多对多) 表:材料表和产品表多对多,在数据库中有中间表即产品材料表用来存放两个表之间的关系 Java类:材料PO,产品PO,这两个PO分别包含一个set容器, 相互放对方的对象,没有中间PO, 程序员因为得不到中间PO对象,所以不能直接操作数据库的中间表。中间表中的记录的维护工作,只能交给hibernate来处理,这时,set容器的inverse属性必须设为false 主PO: public class Users implements java.io.Serializable { private Integer uerid; private String name; private String passwd; private Set roles = new HashSet(0); } <-- property的映射略 -->

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧