首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Internal Versus External BLOBs

如果您拥有一个大型BLOB数据库,那么当您将完整的BLOB内容直接存储在数据库中时,还是将每个BLOB存储在单独的文件中并将相应的文件名存储在数据库中时,您是否获得了更好的读取性能?

为了回答这个问题,我们在Linux工作站上运行了49个测试用例,其中包括各种BLOB大小和SQLite页面大小(Ubuntu大约2011年,在快速SATA磁盘上使用Ext4文件系统)。对于每个测试用例,都会创建一个包含100MB BLOB内容的数据库。BLOB的大小从10KB到1MB不等。BLOB的数量有所不同,以便将总BLOB内容保持在100MB左右。(因此,1MB大小的100个BLOB和10K大小的10000个BLOB)等等。使用SQLite 版本3.7.8(2011-09-19)。

更新:SQLite版本3.19.0(2017-05-22)的新测量结果显示, 对于读取和写入10KB Blob ,SQLite 比直接磁盘I / O的速度快 大约35%。

下面的矩阵显示读取存储在单独文件中的BLOB所需的时间,除以读取完全存储在数据库中的BLOB所需的时间。因此,对于大于1.0的数字,将BLOB直接存储在数据库中会更快。对于小于1.0的数字,将BLOB存储在单独的文件中会更快。

在任何情况下,都会调整页面缓存大小,以将缓存大小保持在2MB左右。例如,对于1024字节页面使用2000页面高速缓存,对于65536字节页面使用31页面高速缓存。BLOB值是以随机顺序读取的。

Database Page Size

BLOB size

10k

20k

50k

100k

200k

500k

1m

1024

1.535

1.020

0.608

0.456

0.330

0.247

0.233

2048

2.004

1.437

0.870

0.636

0.483

0.372

0.340

4096

2.261

1.886

1.173

0.890

0.701

0.526

0.487

8192

2.240

1.866

1.334

1.035

0.830

0.625

0.720

16384

2.439

1.757

1.292

1.023

0.829

0.820

0.598

32768

1.878

1.843

1.296

0.981

0.976

0.675

0.613

65536

1.256

1.255

1.339

0.983

0.769

0.687

0.609

我们从上面的矩阵中推导出以下经验法则:

  • 数据库页面大小为8192或16384可为大型BLOB I / O提供最佳性能。
  • 对于小于100KB的BLOB,当BLOB直接存储在数据库文件中时,读取速度更快。对于大于100KB的BLOB,从单独的文件读取速度更快。

当然,您的里程可能会因硬件,文件系统和操作系统而异。在进行特定设计之前,请仔细检查目标硬件上的这些数字。

代码语言:javascript
复制
 SQLite在公共领域。

扫码关注腾讯云开发者

领取腾讯云代金券