壓縮整數
具體方法有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並收斂