存储优化
存储扩展方案
以下是您在扩展存储规模时可以考虑的一些优化措施,以提高性能并降低成本。
出口流量
如果您的项目有较高的出口流量,这些优化措施可以帮助减少流量消耗。
调整图片尺寸
图片通常占据了出口流量的主要部分。通过尽可能保持较小的图片尺寸,您可以减少流量消耗并提升应用程序性能。您可以使用我们的图片转换服务来实时优化任何图片。
设置较高的缓存控制值
利用浏览器缓存可以有效降低出口流量,因为资源在首次下载后会保留在用户的浏览器中。设置较高的cache-control
值可以确保资源在用户浏览器中保留更长时间,减少重复从服务器下载的需求。了解更多此处
限制上传大小
您可以为存储桶设置最大上传大小。这样做可以防止用户上传然后下载过大的文件。您可以通过在存储桶级别配置此选项来控制最大文件大小。
优化对象列表查询
当存储的对象数量达到一定规模时,您可能会注意到 supabase.storage.list()
方法的执行速度开始变慢。这是因为该端点设计较为通用,会尝试在单个查询中同时获取文件夹和对象。虽然这种设计对于构建类似 Supabase 仪表盘中存储查看器这样的功能非常有用,但在处理大量对象时会影响性能。
如果您的应用不需要计算完整的层级结构,可以通过创建以下 Postgres 函数来显著加快对象列表查询速度:
1234567891011121314151617181920212223242526272829create or replace function list_objects( bucketid text, prefix text, limits int default 100, offsets int default 0) returns table ( name text, id uuid, updated_at timestamptz, created_at timestamptz, last_accessed_at timestamptz, metadata jsonb) as $$begin return query SELECT objects.name, objects.id, objects.updated_at, objects.created_at, objects.last_accessed_at, objects.metadata FROM storage.objects WHERE objects.name like prefix || '%' AND bucket_id = bucketid ORDER BY name ASC LIMIT limits OFFSET offsets;end;$$ language plpgsql stable;
创建函数后,您可以通过以下方式使用它:
使用 SQL 查询:
1select * from list_objects('bucket_id', '', 100, 0);
使用 SDK 调用:
123456const { data, error } = await supabase.rpc('list_objects', { bucketid: 'yourbucket', prefix: '', limit: 100, offset: 0,})
优化行级安全策略(RLS)
在为存储表创建行级安全策略(RLS)时,您可以为相关列添加索引以加快查询速度。