gpt4 book ai didi

php - 为什么压缩的 blob 值不会改变 sqlite 数据库大小?

转载 作者:行者123 更新时间:2023-12-02 02:33:52 25 4
gpt4 key购买 nike

我有一个.sqlite 数据库:

$db = new PDO("sqlite:db.sqlite");

大小为 60MB。它有 1 张 table 。该表的其中一列(唯一重的一列)保存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%

之后我检查了数据库的大小,它仍然是60MBBLOB_TEXT 数据差异为 95%,但数据库大小未改变

那怎么可能呢?或者我在压缩 BLOB_TEXT 时做错了什么?
我预计数据库大小也会减少,因为这是我拥有的唯一的重列。

最佳答案

压缩之前,数据库的数据填充量约为 100%。压缩后,它包含大约 5% 的数据和大约 95% 的可用空间。

通常,避免减小文件大小是一个好主意,因为无论如何,可用空间稍后都会被新数据填满。如果要重新打包数据库,请运行 VACUUM .

关于php - 为什么压缩的 blob 值不会改变 sqlite 数据库大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com