文档章节

让数据库运行在浏览器里?TiDB + WebAssembly 告诉你答案

TiDB
 TiDB
发布于 11/05 16:53
字数 2816
阅读 4143
收藏 49

作者:TiDB 技术团队

作为一名数据库技术人员,一直以来都有个梦想,希望有一个数据库能够弹性扩展(分布式)到成百上千节点的规模,易于学习和理解,可以运行在私有云,公有云,multi-cloud, kubernetes, 也能够跑在嵌入式设备(比如树莓派)上,更酷的是也能够直接运行在浏览器里,且不需要任何浏览器扩展(Extension),变成口袋数据库,就像那部电影《蚁人》。

今天,这一切都变成了现实: TiDB 可以直接运行在浏览器本地。

打开浏览器,你可以直接创建数据库,对数据进行增删改查,关掉浏览器,一切都消失了。干净绿色环保。

由于 TiDB 基本兼容 MySQL 协议和语法,因此我们可以用熟悉的 MySQL 风格,在笔记本浏览器(我用的是 MacOS 上面的 Chrome,不确定其它浏览器是否正常)打开 play.pingcap.com,可能需要几秒来加载页面,然后就能看到熟悉的 Shell 了。 现在来试试几个 SQL 语句吧!

<center>图 1 在浏览器上运行 TiDB</center>

是不是很酷?无痛体验 SQL 的时代到了。

更酷的是,这一切都运行在浏览器本地,删库再也不用跑路了 😈

有了这些,那么是时候给在线学习 SQL 教程的网站加点功能了,比如在文字教程时,同步运行 SQL 语句。这里有个简单的 演示

<center>图 2 SQL 教程网站演示</center>

那么在浏览器里面运行数据库还有哪些好处呢?

还记得你安装配置数据库的痛苦吗?从此以后,每个人随时随地都可以拥有一个数据库,再没有痛苦的安装过程,再也不用痛苦的配置参数,随时享受写 SQL 的快感。也许我们不再需要 indexdb了,SQL 是更高级的API,TiDB 使得「一次编写、到处运行」成了现实。

你一定很好奇这一切是怎么实现的。

  • 这个项目的起源是参加 TiDB Hackathon 2019 比赛 Ti-cool 团队的项目 TiDB-Wasm,是他们的努力让这一切变成了现实;

  • 同时,Go 语言支持了 Wasm ,是近期最让人兴奋的特性之一,至此,在浏览器里运行 Go 语言编写的应用程序成为了现实;

  • 此外,PingCAP 与社区共同努力实现了开源的分布式数据库 TiDB,这让我们可以把 TiDB 编译成 Wasm,在浏览器里直接运行生成的 Wasm 文件。

至此,在浏览器里运行一个数据库成为了现实, 如果没有记错,TiDB 好像是 Go 语言编写的第一个可以在浏览器里面运行的 SQL 数据库。

TiDB + WebAssembly 为何如此让人兴奋?

WASM ,全称:WebAssembly ,是一个可移植、体积小、加载快并且兼容 Web 的全新格式。

  • Wasm 本身是一个很有野心和想象力的技术,极大的扩展了前端的能力,TiDB-Wasm 将数据库这样硬核的基础架构和炫酷的前端领域搭上关系,更进一步让用户在离线环境下就能直接体验。

  • 这种用法是大大降低用户体验 TiDB 的成本,只需要一个浏览器页面和等待下载 Binary 的时间,完全不需要安装部署,就可以体验 TiDB 基本的功能,无论是嵌入到文档中快速运行实例还是作为 Playgroud 网站让用户自由发挥,都非常合适。

  • 从实用角度上来看,除了能成为一个浏览器中的 REPL 供配合文档快速体验和实验之外,TiDB-Wasm 甚至未来还可以作为 js 的 localStorage API 的很好的补充,为 js 生态提供一个 SQLite 之外的高性能本地数据库。

诞生于 TiDB Hackathon 2019 的项目,它的出现让现场评委老师无比激动兴奋,都对它的快速落地充满了期待。

“TiDB-Wasm 极大降低了用户体验 TiDB 能力和初步验证 SQL 兼容性的门槛,使用体验就像 golang playground 一样流畅,Wasm 的出现也为 TiDB 文档中心的建设提出了新的思路,也许不久的将来,TiDB 用户可以像 golang 一样,在阅读文档的同时,就能够在页面上尝试实际操作的体验。我们也期待 Wasm 能够持续发展,实现 TiKV 的沙箱化运行,提供更贴近真实运行场景的 playground,甚至在自动化运维管理方向上贡献更新奇思路。”

——李凯(美团 | 数据库团队负责人)

“刚看到这个项目的时候真的眼前一亮,这是一个非常酷的创意,而且真的对 DBA 运维管理 TiDB 有非常大的帮助,个人强烈希望这个项目能尽快落地支持!

目前我们公司使用 TiDB 时,有很大一部分是由现在业务改造接入,但是面临的一个很重要的问题是 应用原来都是基于 MySQL 开发,虽然 TiDB 在 SQL 语法兼容上做了很多的工作,但是仍然未能 100% 覆盖,所以业务切换前我们都必须要进行 SQL 语法兼容性测试及数据准确性校验。由于 TiDB 的部署都是在线上服务器,基于数据安全,我们的生产和办公网环境是隔离的,要实现上面的需求,目前我们有如下几种方式:a) 研发同学自己写脚本连接查看;b)DBA 登录集群协助验证;c)开发专用查询平台支持。目前这这几种方式都不够安全且效率低下。随着我们维护的 TiDB 集群越来越多,DBA 的对这种低效工作不堪其烦,急需相关工具支持,而 TiDB-Wasm 无疑会解决这种问题,所以希望官方能够重视这个项目,并尽快落地实现。”

——于伯伟(58集团 | 数据库高级经理)

“Wasm 是一个神奇的技术,也许诞生初期的目的只是为了解决 js 运行速度以及其他语言如何操作 html 的问题,但现在大家在用这种技术广泛尝试各种可能。TiDB-Wasm 就是一个很好的尝试,不仅大幅度降低了新人使用 TiDB 的难度、也给文档展示提供了神奇的操作环境、还能大幅度降低应用开发者本机调试环境的构建难度。相信这个思路能给其他服务端的软件一个很好的启发。”

——李道兵(京东云 | 高级总监)

“很多用户希望初步了解 TiDB 但是苦于找不到简单即用的线下环境,这导致他们还未入门就已经放弃。TiDB-Wasm 有望彻底解决这个问题。基于 TiDB-Wasm,用户可以方便的开启 session 来探索 TiDB 的特性和功能,调试 TiDB 的行为,以及对比 TiDB 与 MySQL 等数据库在 SQL 语法、加锁行为、事务隔离等级等细节上的差异,从而帮助用户更深入的理解 TiDB。对官方而言,甚至可以把路由、计算、存储层的扩容缩容、迁移等最佳实践集成到该平台并可视化该过程,从而给用户更真实、直观的感受。这将是一款令人激动的产品,它将促进 TiDB 社区更加繁荣,也将让所有 TiDB 用户受益!”

——赵应钢(美团点评 | 分布式数据库平台开发和运维负责人,研究员)

“TiDB-Wasm 这个项目成功地将 TiDB 移植到了 Wasm,证明了 TiDB 编译到 Wasm 的可行性,同时也反映了 WebAssembly 已走向成熟,相信后面会有更多项目移植到浏览器里运行。目前项目还处于 demo 阶段,后续如果将项目继续落地,在上面添加更多功能,比如使用 indexedDB 让数据持久化,比如使用 webrtc 之类的技术让不同浏览器中的 TiDB 可以进行 P2P 通讯,实现分布式浏览器数据库,我非常期待这些实现。”

——侯圣文(贝壳找房 | 数据技术总监)

“TiDB-Wasm 让我看到了 TiDB 的更多可能性。Wasm 本身是一个很有野心和想象力的技术,极大的扩展了前端的能力,可能大家都玩过类似 go playgound, rust playground 这类 web 的可交互体验平台,TiDB-Wasm 更进一步让用户甚至在离线环境下就能直接体验,可谓最极致的易用。从实用角度上来看,除了能成为一个浏览器中的 REPL 供配合文档快速体验和实验之外,TiDB-Wasm 甚至未来还可以作为 js 的 localStorage API 的很好的补充,为 js 生态提供一个 SQLite 之外的高性能本地数据库……当然,在体验上仍然有很多可以优化的地方,例如给 binary 瘦身,加入集群模式支持等。总体来说这是一个很好玩的项目。”

——黄东旭(PingCAP | 联合创始人兼 CTO)

“这个项目可以说集新颖性和实用性于一身,用一种很巧妙的方式,将数据库这样硬核的基础架构和炫酷的前端领域搭上关系,接下来二者就可以碰撞出各种火花。最直接的用法是大大降低用户体验 TiDB 的成本,只需要一个浏览器页面和等待下载 Binary 的时间,完全不需要安装部署,就可以体验 TiDB 基本的功能,无论是嵌入到文档中快速运行实例还是作为 Playgroud 网站让用户自由发挥,都非常合适。再扩展想一下,TiDB 可以看作 MySQL 的替代品,那么很多 MySQL 的教学网站也可以用这个 Wasm 来提升教学体验。当然,Demo 中演示的 SQL 教学只是最基本的玩法,有了这个东西,我们可以说:恭喜前端圈有了一个 JS 版本的 MySQL。相信前端的同学能把它玩出花来。一句话总结:这绝对是一个叫好又叫座的项目。”

——申砾(PingCAP | Engineering VP)

接下来让我们试试更多有趣的想法:

让更多的在线 SQL 教程都可以直接运行。

让 TiDB 运行在 go play ground 上,或许需要 Go team 的帮助。

支持持久化数据库,我们已经有了云计算,边缘计算,为什么不能有浏览器计算呢?

如果你有新的,有趣的想法,欢迎联系 TiDB 技术团队。

© 著作权归作者所有

TiDB

TiDB

粉丝 210
博文 260
码字总数 694415
作品 4
海淀
私信 提问
加载中

评论(25)

TonyJian
TonyJian
这东西在哪儿,没找到啊
TiDB
TiDB 博主
文中有链接。play.pingcap.com
TonyJian
TonyJian
那么我为什么不用indexedDB或者web sql
crf1111
crf1111
这个数据库是全运行在内存中的吗?如果是,那么持久化策略能否详细介绍下。
TiDB
TiDB 博主
后续会实现持久化的,这是一个 Hackathon 项目,后续还有很多需要完善的地方,欢迎加入一起来玩~https://github.com/pingcap/tidb/projects/27。另外,后续会有原理解读文章,会介绍实现细节的~
东湖畔新家
东湖畔新家
这炸天了
喵小强
喵小强
话说,一些单位现在在搞去国外软件进程,这东西是完完全全国产货么?
calvinwilliams
calvinwilliams
数据库的一个重要特性可是持久化啊
TiDB
TiDB 博主
未来会实现持久化的,这个 Hackathon 项目还在完善之中,欢迎关注,或者加入进来~https://github.com/pingcap/tidb/projects/27
lanceCase
lanceCase
手机打开好慢啊,
TiDB
TiDB 博主
尚不支持手机浏览器,可以用电脑浏览器试试,最好是最新版的 Chrome。
梅开源
梅开源
就不能直接用sqlite和localdb。。
s
shifeng1983
有很多东西做出来就是实验性质,不是为了用
seno
seno
cpu 100% 然后浏览器奔溃,你们呢。
蒋林辉
蒋林辉
tidb啥时候用rust实现自己的存储引擎
八十万禁军教头
八十万禁军教头
听说搞了个 Titan
八十万禁军教头
八十万禁军教头
之所以选择 RocksDB ,一个是前期精力不够,另一个是 RocksDB 本身也很优秀了
八十万禁军教头
八十万禁军教头
https://pingcap.com/blog-cn/titan-design-and-implementation/
橙汁儿
橙汁儿
非ssd存储,开那个Titan可能是反效果
TiDB Binlog 源码阅读系列文章(二)初识 TiDB Binlog 源码

作者:satoru TiDB Binlog 架构简介 TiDB Binlog 主要由 Pump 和 Drainer 两部分组成,其中 Pump 负责存储 TiDB 产生的 binlog 并向 Drainer 提供按时间戳查询和读取 binlog 的服务,Drainer...

TiDB
07/05
38
0
自动化部署运维工具 - TiDB Operator

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 TiDB 成为真正的 Cloud-Native 数据库...

TiDB
2018/08/23
3.7K
0
TiDB Binlog 源码阅读系列文章(一)序

作者:黄佳豪 TiDB Binlog 组件用于收集 TiDB 的 binlog,并准实时同步给下游,如 TiDB、MySQL 等。该组件在功能上类似于 MySQL 的主从复制,会收集各个 TiDB 实例产生的 binlog,并按事务提...

TiDB
06/18
51
0
PingCAP 开源 TiDB 自动化部署运维工具 TiDB Operator

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,目前,TiDB Operator 已经正式开源。 借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 ...

TiDB
2018/08/23
2.7K
2
TiDB 助力东南亚领先电商 Shopee 业务升级

作者介绍 刘春辉,Shopee DBA 洪超,Shopee DBA 一、业务场景 Shopee(https://shopee.com/)是东南亚和台湾地区领先的电子商务平台,覆盖新加坡、马来西亚、菲律宾、印度尼西亚、泰国、越南...

TiDB
2018/12/25
65
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
17分钟前
5
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
8
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
10
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
12
0
计算机实现原理专题--存储器的实现(二)

计算机实现原理专题--存储器的实现(一)中描述了一种可以记住输入端变化的装置。现需要对其功能进行扩充,我们将上面的开关定义为置位,下面的开关定义为复位,然后需要增加一个保持位,当保...

FAT_mt
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部