Supabase:当开源遇上实时数据库服务

在当代应用开发的浪潮中,我们见证了无服务器架构和实时数据库服务的崛起。Firebase 的成功验证了这一方向,但同时也带来了供应商锁定的困扰。正是在这样的背景下,Supabase 横空出世,以开源的姿态为开发者提供了一个全新的选择。

为什么 Supabase 值得关注?

当我们谈论 Supabase 时,不能简单地将其定义为"开源版的 Firebase"。这种比较虽然直观,却可能掩盖了 Supabase 的独特价值。事实上,Supabase 代表了一种全新的思维方式:它证明了我们可以用开源组件构建一个功能完备的实时数据库服务,而不必依赖封闭的专有技术。

想象一下这样的场景:你正在开发一个实时协作的应用,需要处理实时数据同步、身份认证、文件存储等复杂需求。传统方案可能需要集成多个服务,而 Supabase 则提供了一个统一的解决方案,同时保持了开源的灵活性。

技术栈的明智选择

Supabase 的技术栈选择体现了深刻的工程智慧。它以 PostgreSQL 为核心,而不是重新发明一个数据库引擎。这个选择乍看平淡,实则高明:

-- Supabase 的实时功能建立在 PostgreSQL 的基础上
CREATE TABLE documents (id uuid DEFAULT uuid_generate_v4(),content text,last_modified timestamp DEFAULT now(),PRIMARY KEY (id)
);-- 启用实时功能只需要简单的配置
ALTER PUBLICATION supabase_realtime ADD TABLE documents;

这段简单的代码背后,体现了 Supabase 的几个关键优势:

  1. 站在巨人的肩膀上
    PostgreSQL 经过数十年的发展,已经是一个成熟且强大的数据库系统。Supabase 通过扩展而不是替换 PostgreSQL,继承了这份成熟度。

  2. 实时功能的优雅实现
    Supabase 通过 PostgreSQL 的 logical replication 功能实现实时更新,这是一个巧妙的设计决策。它避免了重复造轮子,同时确保了可靠性。

开发体验的革新

Supabase 对开发体验的重视令人印象深刻。看看这个实时订阅的例子:

const supabase = createClient('https://your-project.supabase.co','your-anon-key'
)// 实时订阅数据变化
const subscription = supabase.from('documents').on('*', payload => {console.log('Change received!', payload)}).subscribe()

这段代码看起来简单,但它展示了 Supabase 在开发体验上的几个重要创新:

  1. 声明式 API
    开发者不需要关心底层的 WebSocket 连接管理、重连逻辑等复杂细节。

  2. 类型安全
    如果你使用 TypeScript,Supabase 可以自动生成数据库表的类型定义,这在规模化开发中特别有价值。

身份认证:安全与便利的平衡

Supabase 的身份认证系统展示了如何在安全性和便利性之间取得平衡:

// 使用魔法链接进行无密码登录
const { user, error } = await supabase.auth.signInWithOtp({email: 'user@example.com'
})// Row Level Security 的简单配置
CREATE POLICY "Users can only access their own data"
ON documents
FOR ALL
USING (auth.uid() = user_id);

这个设计反映了现代应用开发的几个重要趋势:

  1. 无密码认证
    越来越多的应用选择使用魔法链接等无密码方案,Supabase 使这个过程变得简单。

  2. 细粒度访问控制
    通过 PostgreSQL 的 Row Level Security,Supabase 提供了强大而灵活的权限控制。

储存解决方案:超越简单的文件存储

Supabase 的存储解决方案建立在 S3 兼容的对象存储之上,但它的实现更加智能:

// 上传文件并自动生成缩略图
const { data, error } = await supabase.storage.from('images').upload('public/image.png', file, {transformations: [{name: 'thumbnail',width: 100,height: 100}]})

这个特性体现了 Supabase 的一个重要理念:提供高级功能,但保持 API 的简洁性。

实践中的考虑

在实际应用 Supabase 时,有几个关键点值得注意:

  1. 数据模型设计
    由于 Supabase 使用 PostgreSQL,我们可以充分利用关系数据库的优势,但同时需要注意实时功能对数据模型的影响。

  2. 扩展性考虑
    虽然 Supabase 提供了托管服务,但它的开源特性意味着我们可以在需要时完全控制部署和扩展。

未来展望

Supabase 的发展方向值得期待:

  1. Edge Functions
    边缘计算将为实时应用带来更低的延迟和更好的用户体验。

  2. AI 集成
    PostgreSQL 的向量搜索能力为 AI 应用提供了基础。

  3. 多区域部署
    对全球化应用的支持将进一步增强。

结语

Supabase 不仅仅是一个 Firebase 的开源替代品,它代表了一种新的应用开发范式。通过组合成熟的开源技术,它创造了一个强大而灵活的平台。对于现代应用开发者来说,Supabase 提供了一个值得认真考虑的选择。

在选择技术栈时,我们不应该被"开源版 Firebase"这样的标签所限制。相反,应该认真评估 Supabase 独特的优势:开源的灵活性、PostgreSQL 的成熟度、实时功能的优雅实现,以及不断发展的生态系统。在这个需要快速构建实时应用的时代,Supabase 为我们提供了一个强大而实用的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【华为HCIP实战课程二十九】中间到中间系统协议IS-IS邻居关系建立和LSP详解,网络工程师

一、广播环境邻居关系建立详解 1、广播环境邻居关系建立 广播邻居关系采用三次握手,携带的邻居列表为接口的MAC来标识 2、LSP同步:3种报文(CSNP和PSNP和具体的LSP) CSNP作用类似DBD,请求者发送PSNP(类似LSR)来请求具体的LSP 广播网络LSP交互过程: R1-R2(DIS)--R3…

<HarmonyOS第一课>应用/元服务上架的课后习题

善者,吾善之; 不善者,吾亦善之,德善。 信者,吾信之; 不信者,吾亦信之,德信。 圣人在天下,歙歙焉为天下浑其心,百姓皆注其耳目,圣人皆孩之。 通过&…

九识智能与徐工汽车达成战略合作,共绘商用车未来新蓝图

近日,九识智能与徐工汽车签署战略合作协议,标志着双方在智能驾驶技术与新能源商用车融合应用、联合生产及市场推广等方面迈入深度合作的新篇章,将共同引领智能驾驶技术商业化浪潮。 近年来,在国家智能化发展战略的引领下&#xff…

根据Redis漏洞通知的整改修复过程

一、收到通知: 二、查看本校“宝山商城(教学)”已安装的Redis版本号 对照影响范围的版本号,在其内,所以需要升级Redis版本。 三、升级centos中的Redis版本 在Cent0S系统中,如果我们需要升级Redis版本&…

docker 可用镜像服务地址(2024.10.31亲测可用)

1.错误 Error response from daemon: Get “https://registry-1.docker.io/v2/” 原因:镜像服务器地址不可用。 2.可用地址 编辑daemon.json: vi /etc/docker/daemon.json内容修改如下: {"registry-mirrors": ["https://…

Git (推送到远端仓库)

目录 一、在 gitee 上创建一个仓库 二、将项目推送到远程仓库 三、解释推送命令 一、在 gitee 上创建一个仓库 操作如下: 二、将项目推送到远程仓库 这里例举新的项目推送到远程仓库的例子: 打开仓库查看: 三、解释推送命令 添加远程仓库…

opencv学习笔记(6):图像预处理(直方图、图像去噪)

3.直方图 直方图是用来表现图像中亮度分布的,给出的是图像中某个亮度或者某个范围亮度下共有几个像素,即统计一幅图某个亮度像素的数量。 直方图不能反映某一灰度值像素在图像中的位置,失去了图像的空间信息。图像直方图由于其计算代价较小&a…

《双指针篇》---移动零

题目传送门 这道题可以归类为 数组划分/数组分块 。 题目制定了一个规则,我们可以在这个规则下,将数组划分为若干个区间。 这道题让我们把所有非零元素移动到左边。所有零元素移动到右边。 将数组划分为: 左区间非0; 右区间&…

OpenHarmony、HarmonyOS、HarmonyNext互相兼容吗?

1,三者之间的关系 OpenHarmony:开源底层。HarmonyOS:闭源手机系统,兼容安卓生态。HarmonyOS NEXT:纯血鸿蒙,不兼容安卓。 上一篇文章简单介绍过,就不再多说了,这里说一下HarmonyOS …

Camera学习笔记(202410)

课程:CameraX:面向开发者的摄像头支持库 链接:CameraX:面向开发者的摄像头支持库_哔哩哔哩_bilibili 课程时长:28:00 学习时间:2024-10-29 概述:2019年Android CameraX的发布会 个人感觉&a…

Django入门教程——用户管理实现

第六章 用户管理实现 教学目的 复习数据的增删改查的实现。了解数据MD5加密算法以及实现模型表单中,自定义控件的使用中间件的原理和使用 需求分析 系统问题 员工档案涉及到员工的秘密,不能让任何人都可以看到,主要是人事部门进行数据的…

BugKu练习记录:矛盾

题目: $num$_GET[num]; if(!is_numeric($num)) { echo $num; if($num1) echo flag{**********}; }关键在于绕过is_numeric,PHP中字符串与数字弱比较,会将字符串转换为数字,截至到非数字字符,如果第一个字符就是非数字…

安宝特分享 | AR技术引领:跨国工业远程协作创新模式

在当今高度互联的工业环境中,跨国合作与沟通变得日益重要。然而,语言障碍常常成为高效协作的绊脚石。安宝特AR眼镜凭借其强大的多语言自动翻译和播报功能,正在改变这一局面,让远程协作变得更加顺畅。 01 多语言翻译优势 安宝特A…

逗号运算符应用举例

在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用set…

vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了

Vxe UI vue vxe-table v4.8 与 v3.10 解决了老版本虚拟滚动不支持动态行高的问题&#xff0c;重构了虚拟渲染&#xff0c;渲染性能大幅提升了&#xff0c;行高自适应和列宽拖动都支持&#xff0c;大幅降低虚拟渲染过程中的滚动白屏&#xff0c;大量数据列表滚动更加流畅。 自适…

ICPC区域赛成都站【赛后回顾+总结】

传送门 前言赛后总结赛后回顾赛后感悟 前言 首先&#xff0c;这是本人本赛季第一场XCPC区域赛&#xff0c;也是本人算竞生涯中第一场XCPC区域赛&#xff08;之前只打过邀请赛和省赛&#xff09;。 赛后总结 然后赛后总结一下&#xff1a;我队天崩开局&#xff0c;我队出师不利…

c盘满了怎么清理垃圾而不误删?6招轻松清理C盘,快来试试

c盘满了怎么清理垃圾而不误删&#xff1f;相信平时工作生活中离不开电脑&#xff0c;随着使用电脑时间就了&#xff0c;C 盘的空间会不断被占据&#xff0c;进而致使系统运行变得迟缓&#xff0c;甚至出现卡顿现象。因此&#xff0c;定期清理 C 盘的是非常重要的。很多电脑小白…

excel的宏1

1宏和vba visual basic for applications 一种编程语言 2vba编写一系列指令的程序&#xff0c;就是宏 3完成重复性的数据任务 点击开发工具 使用设置的宏之后表格的变化 excel帮忙编写了一个代码 以上为自动编写的代码

Swarm-LIO: Decentralized Swarm LiDAR-inertial Odometry论文翻译

文章目录 前言一、介绍二、相关工作三、方法A. 问题表述B. 框架概述C. 群体系统的初始化D. 去中心化激光雷达-惯性状态估计 四. 实验A. 室内飞行B. 退化环境飞行C. 去中心化部署 五. 结论和未来工作 前言 原文&#xff1a;原文 准确的自我状态和相对状态估计是完成群体任务的关…

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件&#xff0c;它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用&#xff0c;并探讨其在各种应用中不断扩展…