文档

数据缓存

更新时间:

ossfs数据缓存适用于小数据量频繁读取的场景,开启ossfs数据缓存后,能够有效降低读取延迟,提升文件操作效率。本文将为您介绍如何更好地使用和配置ossfs数据缓存。

重要

在使用缓存数据时,需要留意数据的一致性和时效性问题。因此,在对数据实时性要求较高的场景中,不建议开启ossfs缓存模式。

功能背景

使用ossfs进行文件访问时,ossfs会默认在/tmp目录下创建一个临时文件tmpfile作为磁盘缓存,该文件对用户不可见。当所有打开的文件句柄均被关闭后,系统会自动清理这些临时文件。但对于频繁加载相同数据的业务场景,这种机制可能会导致每次打开、读取和关闭同一文件时都需要重新从OSS下载数据,占用了大量OSS吞吐能力。

通过开启ossfs本地缓存模式可以有效降低频繁读取热数据对远程存储的吞吐压力,降低读取延迟,减少对远程存储的访问次数。

适用场景

适用于数据量较小且需频繁读取的场景。需确保本地磁盘空间足够存储热点数据。

模式对比

ossfs在默认(无数据缓存)以及开启数据缓存这两种模式下,其功能差异如下表所示。在默认模式下建议通过tmpdir选项将临时文件从/tmp目录调整到数据盘目录,避免占用系统盘空间。

模式

读操作

写操作

性能

默认(无数据缓存)

每次均从OSS Bucket读取,下载的数据会写到临时文件,再从临时文件中读取。所有句柄关闭时清理该文件。

会产生临时文件,只有在所有句柄都关闭时才会将其删除。在写入大量文件的过程中,容易占用大量的磁盘空间。

如果本地磁盘空间不足,会提前上传分片数据并清理缓存。在这种情况下,写入速度会受到OSS上传速度的制约。

性能取决于磁盘性能和OSS的延迟。

数据缓存

首次从OSS Bucket读取后在缓存路径创建文件,重复读取从本地获取。

先将数据写入本地缓存,当文件触发刷新和关闭操作时,会统一将数据上传至OSS Bucket。如果本地缓存空间不足,会提前上传分片数据并清理缓存。在这种情况下,写入速度会受到OSS上传速度的制约。

如果本地有缓存,性能则取决于磁盘性能。如果没有缓存,则和默认模式一样。

配置选项

ossfs缓存配置选项如下:

选项名称

描述

默认值

use_cache

启用数据缓存并指定数据缓存路径。默认不启用。您可以通过指定该选项来配置缓存路径。

例如,您可以在挂载时添加-ouse_cache=path,则表示使用数据缓存且指定数据缓存路径为path。其中path请根据实际路径设置,例如/tmp/your_foldername。

ensure_diskfree

控制预留磁盘空间大小。默认不预留。您可以通过该选项设置保留的可用硬盘空间大小,避免磁盘写满影响其他应用写入,单位为MB。

例如,您需要设置ossfs保留1024 MB的可用磁盘空间,则可以在挂载时添加-oensure_diskfree=1024

del_cache

控制删除本地缓存。默认不删除。您可以通过设置该选项来配置ossfs清理本地数据缓存。

例如,您可以在挂载时添加-odel_cache选项,ossfs会在mount和umount时清理use_cache指定的文件夹下的缓存文件。

max_dirty_data

当写文件大小超过这个值时,不用关闭文件就会提前上传。默认值为5120 MB。

例如,您需要设置写文件超过2000 MB就提前上传,则可以在挂载时添加-omax_dirty_data=2000

5120 单位:MB

数据缓存管理机制

  • 缓存模式下,关闭文件时不会对磁盘上的缓存文件进行清理,以便在未来再次读取时可以直接使用。

  • 缓存空间不足时,缓存会对缓存数据进行淘汰。

    在进行读写操作时,系统会检查磁盘空间的使用情况,一旦磁盘空间不足,就会触发回收操作。回收操作以单个缓存文件为最小单位进行。

使用建议

  • 如果您有频繁访问的热文件,建议开启数据缓存并配置缓存路径。这样在重复读取时能够直接从本地获取文件,从而减少访问延迟,有助于频繁访问的文件实现快速加载。与此同时,还能减少对OSS的请求量。

  • 如果您的缓存空间所在磁盘还有其他应用在使用,那么建议在使用时添加挂载选项ensure_diskfree。这样可以预留一定的空间,以保证系统的正常运行。

  • 不建议在多写多读,或者一写多读且要求多客户端数据保持一致性的场景下使用。

  • 写场景下ossfs缓存必须存在,若您不想浪费磁盘空间,建议使用ossutil

  • 在大文件一次性读取的场景中,缓存的作用较为有限。因此,建议使用直读模式以降低磁盘空间的占用。

  • 数据缓存的性能与缓存数据所在磁盘的性能密切相关。建议选择性能较好的磁盘,例如:ESSD AutoPL开启性能突发、弹性临时盘或本地盘。具体详情,请参见ESSD AutoPL云盘