压缩整数
具体方法有3种。
方法一:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--
no_log和truncate_only是在这里衡中是同义的,随便执行哪一句都可以。
第二步:
1.收缩特定数据库的所有数据和日志文件,执行:
dbcc
shrinkdatabase
(database_name,[,target_percent])
--
database_name是谨誉要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
2.收缩一次一个特定数据库中的数据或日志文件,执行
dbcc
shrinkfile(file_id,[,target_size])
--
file_id是要收缩的文件的标识
(id)
号,若要获得文件
id,请使用
file_id
函数或在当前数据库中搜索
sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc
shrinkfile
将文件大小减少到默认文件大小。两个dbcc都可以带上参数notruncate或truncateonly,具体意思查看联机帮助.
方法二:
第一步:
先备份整个数据库以备不测
。
第二步:
备份结束后,在query
analyzer中执行如下的语句:
exec
sp_detach_db
yourdbname,true
--卸除这个db在mssql中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在query
analyzer中执行如下的语句:
exec
sp_attach_single_file_db
yourdbname,'
d:\mssql\data\yourdbname_data.mdf
'
--以单文件的方式注册该db,如果成功则mssql将自动为这个db生成一个500k的日志文件。
方法三:
1.
进入企业管理器,选中数据库,比如demo
2.
所有任务->分离数据库
3.
到数据库文件的存放目录,将muonline_log.ldf文件删除,以防万一,你可以拷出去
4.
企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧,继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。
5.
记得数据库重新附加后用户要重新设置一下。
如果以后,不祥拦段想要它变大:
sql2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用sql语句:
alter
database
数据库名
set
recovery
simple
❷ 用C语言编程:一个简单的数据压缩程序(急!!!)
#include"stdio.h"
int c1(char a[],int i)
{int c=1;
while(a[i+1]==a[i])
{c++;i++;}
return c;
}
int c2(char a[],int i)
{int c=0;
while(a[i+1]!=a[i])
{c++;i++;}
return c;
}
int len(char a[])
{ int i=0;
while(a[i]!='\0')
i++;
return i;
}
main()
{char b[100];
char a[100]={'5','5','5','8','1','3','胡此9','9','9','9','7','2','7','2','6','6','6'};
int i=0,j=0,k=0,s,c;
while(a[i]!='裤链迅\0')
{
if(a[i+1]==a[i])
{
c=c1(a,i);
b[j]=c;
b[j+1]=a[i];
i++;j++;
}
else
{ c=c2(a,i);
b[j]=-c;
for(k=0;k<c;k++)
{b[j+1]=a[i];
i++;j++;}
}
i+=c;
}
s=len(b);
for(j=0;j<s;j++)
printf("%d",b[j]);
}
帮我唤毕看一下,哪里错了,谢谢
❸ 易语言压缩数据问题,求解
压搭笑巧缩升没之后的数据就变了 当然会是乱码 你要显示的是易语言格式的字节集吧
.版本 2
.子程序 字节集到易格式文本_内知键存, 文本型, , <内存文件版> By 帝皇法老
.参数 字节集, 字节集
.局部变量 文件号, 整数型
.局部变量 结果, 文本型
.局部变量 X, 整数型
文件号 = 打开内存文件 ()
.计次循环首 (取字节集长度 (字节集), X)
写出文本 (文件号, 字节集 [X], “,”)
.计次循环尾 ()
移到文件首 (文件号)
结果 = “{” + 读入文本 (文件号, 取文件长度 (文件号) - 1) + “}”
关闭文件 (文件号)
返回 (结果)
❹ C++对一长度为22的数字字符串,无损压缩为16位字符串,并且可逆。有什么好的算法
长度22的数字字符串表示的应该是0至10^23-1
即0到9999....9 (22个9)
一个字符串占一个字节8位,理论上最多表示2^8-1,0~255个状态,
或者说一个字节无符号整数范围是0~255
要无损压缩0至10^23-1范围内的整数,至少需要二进制77位(23/log10(2))
你所说的16位字符串是只16个字符串把,也就是16字节,128位吧,
如果是的话,压缩还是很有冗余的,要是小于77为二进制数,就不可能无损压缩了
最简单的就是用4位二进制码表示1个十进制数
4位二进制码有16中可能,取其中的10中可能表示十进制0~1
那么每两位十进制数就用一个字节表示,22位,只需要11个字节就够了
数字字符0~9的ascii码是48~57(十六进制30~39),只保留低四位就是0~9
两个10进制数给占4位,占一个字节
压缩编码的时候,从十进制低位起,每两个数字一组(个位和十位,百位和千位.....)
(低位的ascii-48) +(高位的ascii-48)*16 获得一个字节
22位的数字,能够获得11个字节的数据,如果要16个字节的话,就有5个字节的冗余
解码的时候,从低到高获得每个字节
字节数据/16的商+48 就是高位的ascii码
字节数据/16的余数+48 就是地位的ascii码
当然乘除可以用移位运算代替,速度更快
❺ 压缩算法的比较
压缩对象是一个大小为1.7M的csv文件,总共6829行,每行74列,即一行大小为261byte
使用全Double类型(一个Double为8字节)保存一行数据的话,一行为592byte
使用更适合的数据类型时(-125-124用Byte保存,浮点型用Float保存,其余用short保存,各别较大的整数用int保存),一行为143byte
由上图可知当压缩行数为40行时,bzip压缩比例达到11,gzip压缩比例达到9
由上图知,当压缩行数为150时,gzip压缩比例为10并收敛,而bzip压缩比例在行数为500时达到18(行数为1000时压缩比例为20,此处不画出)
由上图知,除bzip外,其余算法压缩时间变化不大,且远下于bzip,bzip算法随着压缩行数增加,压缩时间减少但仍然高于gzip
根据数据以及以上两图,gzip的压缩性价比最好,bzip随着压缩行数增加,性价比提高,但仍比gzip差
压缩能力Bzip > Gzip ≈ Snappy ≈ Lz4 ≈ Lzo
耗费时间 Bzip > Gzip ≈ Snappy ≈ Lz4 ≈ Lzo
压缩性价比 Gzip > Snappy ≈Lz4 ≈ Lzo >Bzip
由上图可知,bzip压缩比例最好,在500行时达到5(不会再变化),gzip次之,在30行时达到3并收敛
由上图可知,bzip压缩耗时最多,并随着压缩行数增加而减少,但仍高于gzip
由上图可知,gzip与snappy压缩性价比相近,而bzip压缩性价比在行数达到150时接近bzip并收敛