【发布时间】:2014-06-11 13:10:51
【问题描述】:
我有一个.sqlite 数据库:
$db = new PDO("sqlite:db.sqlite");
大小为 60MB。它有 1 张桌子。此表列之一(唯一的重列)包含BLOB_TEXT 数据。我正在尝试压缩此列值:
$pdo = $db->query("SELECT id, house_plan FROM houses");
$houses = $pdo->fetchAll(PDO::FETCH_ASSOC);
$initial_length = 0;
$compressed_length= 0;
for ($i = 0; $i < count($houses); $i++) {
$id = $houses[$i]["id"];
$house_plan = $houses[$i]["house_plan"];
$compressed = gzcompress($house_plan);
$initial_length += strlen($house_plan);
$compressed_length += strlen($compressed);
flush();
$query = $db->prepare("UPDATE houses SET house_plan=? WHERE id=" . $id);
$query->bindParam(1, $compressed, PDO::PARAM_LOB);
$query->execute();
}
然后打印相加的初始BLOB_TEXT数据长度和压缩数据长度(替换了表中的初始数据):
echo "Before: " . $initial_length . ", After: " . $compressed_length;
// Before: 52222553, After: 2577948
以及它们的百分比差异:
echo "Difference: " . (100 - round($compressed_length / $initial_length * 100)) . "%";
// Difference: 95%
之后我检查了数据库的大小,仍然是 60MB。 BLOB_TEXT数据相差95%,但数据库大小没有变化。
那可能是什么?或者我在压缩BLOB_TEXT时做错了什么?
我预计数据库大小也会减少,因为这是我唯一的重列。
【问题讨论】:
标签: php sqlite compression blob