图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快

最近有一批图片资源需要本地存储,但是看到密密麻麻的文件夹,头都麻了。想起过去图片迁移硬盘的痛苦(文件太多)。所以在想如果我写在 sqlite 里面,那效果怎么样呢? 于是马不停蹄的,写了一个脚本,把图片资源导入了sqlite4file.db。表结构也很简单

type Entity struct {
    Id        uint64    `gorm:"primaryKey;column:id;autoIncrement;not null;" json:"id"`          // 主键
    Name      string    `gorm:"column:name;index;type:varchar(256);not null;" json:"name"`       //
    Type      string    `gorm:"column:assert_type;index;type:varchar(64);not null;" json:"type"` //
    Data      []byte    `gorm:"column:content;type:BLOB;" json:"data"`                           // 内容
    CreatedAt time.Time `gorm:"column:created_at;index;autoCreateTime;" json:"createdAt"`        //
    UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime;" json:"updatedAt"`
}

当然写进去还是要测一测的,如果性能暴跌,或者文件变得巨大无比,就得不偿失了。

首先是体积对比

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快

我们一共又7.4w的文件

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快

空间上的对比,五五开吧。

我们在测一下图片查看,这里写了个api查看。

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快
中图gin + gorm + sqlite(cgo)

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快
中图gin c.file(path) 调用

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快

中图gin + gorm + sqlite (PureGo)

这个场景下可以看到纯go版本的sqilte不但比文件快,而且比cgo版本的sqlite还要快

接下来再试一下大图

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快
大图gin + gorm + sqlite(cgo)

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快
大图gin c.file(path) 调用

图像存储之 Sqlite/文件存储? Cgo/PureGo? 谁更快

大图gin + gorm + sqlite (PureGo)

这个场景下可以看到 硬盘读文件,竟然又变得远超两个sqlite。因为qps均没有超过之前的中图,所以可以认为有其他方面的性能瓶颈。从测试结果上看。很有可能是使用如此大图,在高频读写的场景下,sqlite可能出现了io瓶颈,但是直接读源文件会好一些。(猜测)当然过程中也看了cpu使用率,sqlite的场景并没有比纯文件的高。但是相差不大。所以应该还是又io方面的瓶颈。

当然因为这个场景都是后续本机操作,所以sqlite对我来说也是一个不错的选择。
网上主流大多不推荐用mysql存储图片,牵扯到多次网络传输的开销。但是我的场景以本地为主,sqlite 和主程序都在同一个宿主机。并且在小图情况下,还有一点点读取优势,所以综合来说也是一个不错的选择。

当然了,sqlite每次完整的读取出文件可能相比较其他还是有一些压力,但文件平均都不是特别大(都是最大也就几MB)。所以也是一种不错的选择,方便以后迁移的时候,直接把sqlite复制以下就。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 4

SQLite 换用不同的 page_size 试试?(默认 4KB/页,换成 16KB 试试?)

可能大文件,SQLite 要额外找其他页的次数过多了?

5个月前 评论
我们只希望世界和平 (楼主) 5个月前

:joy: 我最近也打算,用sqlite来进行,存储图片和资料,方便转移,我打算直接存入base64的图片

5个月前 评论
我们只希望世界和平 (楼主) 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
51
粉丝
16
喜欢
57
收藏
43
排名:519
访问:1.6 万
私信
所有博文
社区赞助商