存储

存储优化

存储扩展方案


以下是您在扩展存储规模时可以考虑的一些优化措施,以提高性能并降低成本。

出口流量

如果您的项目有较高的出口流量,这些优化措施可以帮助减少流量消耗。

调整图片尺寸

图片通常占据了出口流量的主要部分。通过尽可能保持较小的图片尺寸,您可以减少流量消耗并提升应用程序性能。您可以使用我们的图片转换服务来实时优化任何图片。

设置较高的缓存控制值

利用浏览器缓存可以有效降低出口流量,因为资源在首次下载后会保留在用户的浏览器中。设置较高的cache-control值可以确保资源在用户浏览器中保留更长时间,减少重复从服务器下载的需求。了解更多此处

限制上传大小

您可以为存储桶设置最大上传大小。这样做可以防止用户上传然后下载过大的文件。您可以通过在存储桶级别配置此选项来控制最大文件大小。

优化对象列表查询

当存储的对象数量达到一定规模时,您可能会注意到 supabase.storage.list() 方法的执行速度开始变慢。这是因为该端点设计较为通用,会尝试在单个查询中同时获取文件夹和对象。虽然这种设计对于构建类似 Supabase 仪表盘中存储查看器这样的功能非常有用,但在处理大量对象时会影响性能。

如果您的应用不需要计算完整的层级结构,可以通过创建以下 Postgres 函数来显著加快对象列表查询速度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
create 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 查询:

1
select * from list_objects('bucket_id', '', 100, 0);

使用 SDK 调用:

1
2
3
4
5
6
const { data, error } = await supabase.rpc('list_objects', { bucketid: 'yourbucket', prefix: '', limit: 100, offset: 0,})

优化行级安全策略(RLS)

在为存储表创建行级安全策略(RLS)时,您可以为相关列添加索引以加快查询速度。