2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

一项针对数据库 URI 标准的提议

  • 2013-12-24
  • 本文字数:1696 字

    阅读完需:约 6 分钟

大卫·惠勒提出了一种用于数据库连接的标准 URI 格式。该提议将允许基于不同技术构建的应用程序共用相同的连接串。这对于包括报表设计器、自动构建和部署工具以及 ORM 在内的众多工具都是有好处的。该提议以 db 作为方案名,紧随其后是数据库引擎名。这是第一个与当前做法不同的地方。它没有指定具体的驱动程序,而是留给应用程序自己决定。

对于跨平台的 URI 标准而言,这是关键。由于连接到同样的数据库引擎常常需要不同的驱动程序名,所以在 JDBC、OleDB 和 ODBC 之间共用连接串非常困难。即使在一种 API 中,也可能有多种驱动程序可用。

在引擎名之后是一组标准化的参数:用户名、密码、主机、端口和数据库名。这些参数总是以相同的顺序出现,这是又一个与当前做法不同的地方。

  • db:engine://[username[:password]@]host[:port][/dbname][?params]
  • db:engine:[dbname][?params]

任何数据库在“?”之后指定参数都非常像 HTTP 请求的查询参数。这些参数会使用标准的键 - 值格式。

最后是一个可选段,用符号“#”表示,用于指定具体的表或视图。

有若干格式都是遵循 engine://authority/dbname 这一惯例,该格式即是受此启发。

有人对使用前缀“db:”提出了若干反对意见。彼得·艾森特劳特写到,

我认为前缀 db:是没有必要。首先,我认为,RFC 3986 的语法规则不允许有两个方案前缀。其次,它没用。假设一款软件能够使用这些 URI,那么它也将能够通过方案本身知道需要做什么。

通常,URL 确定了用于访问资源的协议,但它并不是资源的性质。例如,一个 git 库可以通过几种不同的方案访问。没有单独的 git:URL 系统,更不用说 scm:git 或者其它什么实现。另外,浏览器能够通过诸如 http:和 ftp:等几种不同的协议访问文件。没有单独的 textfile:或者 video:URL 方案。真见鬼,文件甚至可能是一个数据库,因此,我希望有个像 SQLite 的东西,可以接受典型的 http:URL 作为其数据库 URL。

除了要求实现者尽力忠实地遵循 RFC 3986 外,我不认为有很多东西需要标准化。

我们也可以反驳上述观点。例如,如果没有一个通用的前缀,开发人员将不得不在操作系统中为应用程序能够连接的每个数据库引擎注册一个单独的前缀。当遇到先前不知道的数据库时,这种方案会允许应用程序提示用户,而不是简单地失败。这类似于每个文件类型都一个单独的前缀,而不是仅仅使用 http/https,然后由浏览器决定做什么。

大卫·惠勒在其声明中提到了其它需要考虑的问题。

首先,权限部分必须包含一个主机地址的要求阻止了可用于连接 Unix 套接字的只包含一个用户名的 URI 规范。其中,PostgreSQL 和 MySQL 提供经过身份验证的套接字连接。 RFC 3986 需要主机名,而其前身 RFC 2396 并不需要。此外,作为先例,文件 URI 也不需要。因此,我正考虑允许使用类似的方式连接到 PostgreSQL 数据库:

db:pg://postgres:secr3t@/

总之,允许用户信息中没有主机名是有意义的。

第二个问题是在权限部分之后的路径部分中不允许相对文件名。这里的问题是,大部分数据库引擎并不使用路径作为数据库名,因此,前面的斜杠毫无意义。例如,在 db:pg:localhost/foo 中,PostgreSQL 数据库的名称是 foo,而不是 /foo。但在 db:firebird:localhost/foo 中,Firebird 数据库的名称是路径 /foo。这样,每一种引擎实现必须知道路径部分是否是一个文件名。

但实际上,有些数据库可能允许为本地连接指定路径,为远程连接指定名称。Informix 似乎就支持这种变体。那么如何知道路径是文件路径还是命名的数据库呢?这两种变体是无法区分的。

RFC 2396 非常明确地规定,当路径部分在权限部分的后面时必须是绝对路径。但是,RFC 3986 只在没有权限部分时才禁止双斜杠。因此,我认为,对于绝对路径,最好是有第二道斜杠。使用简单名称或者相对路径的引擎可以直接将它们放在第一道斜杠后面,而绝对路径可以使用第二道斜杠:

  • 绝对路径: db:firebird://localhost//tmp/test.gdb
  • 相对路径: db:firebird://localhost/db/test.gdb
  • 名称: db:postgresql://localhost/template1

查看英文原文:**** A Proposal for a Database URI Standard

2013-12-24 06:071727
用户头像

发布了 256 篇内容, 共 99.5 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

Hands on HTML & CSS

无人之路

CSS html

云渲染市场安全吗?如何保证数据安全、财产安全?

Renderbus瑞云渲染农场

云渲染 云渲染农场 云渲染安全

安畅SmartOps混合云平台架构的演进之道

安畅Anchnet

云原生

Apache RocketMQ 斩获 InfoQ 2022 年度十大开源新锐项目

阿里巴巴云原生

阿里云 云原生 Apache RocketMQ

为什么说 数据服务是数据中台的标配?

用友BIP

1月10日 KaiwuDB 1.0 线上发布会

KaiwuDB

一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup

华为云开发者联盟

大数据 后端 华为云 企业号 1 月 PK 榜

YMatrix v5.0 发布:138 项深度优化,重塑集群架构,实现性能及高可用性全方位提升!

YMatrix 超融合数据库

OLAP OLTP 超融合数据库 数据库架构设计 YMatrix

IoT物联网设备「固件升级」OTA,「资源包更新」最佳实践——实践类

阿里云AIoT

运维 物联网 数据格式

2023 年openEuler 社区技术委员会增选,新增2位委员

openEuler

Linux 开源 操作系统 openEuler 资讯

IoT物联网平台「设备影子」开发实战——实践类

阿里云AIoT

JavaScript json 物联网 API 储存

IM通讯协议专题学习(七):手把手教你如何在NodeJS中从零使用Protobuf

JackJiang

即时通讯 protobuf im开发

站酷基于服务网格ASM的生产实践

阿里巴巴云原生

阿里云 云原生 服务网格

累计装机超过300万套 欧拉操作系统跨越生态拐点

极客天地

EMQ携“云边协同IIoT解决方案”亮相2022世界工业互联网产业大会

EMQ映云科技

人工智能 物联网 IoT 云边协同 企业号 1 月 PK 榜

强强联手 | 尚硅谷&腾讯云EMR离线数仓教程发布

小谷哥

基于开源体系的云原生微服务治理实践与探索

阿里巴巴云原生

阿里云 开源 云原生 service mesh

2023年AI十大展望:GPT-4领衔大模型变革,谷歌拉响警报,训练数据告急

OneFlow

人工智能 深度学习

划重点,2023 年最值得关注的 8 大技术趋势

PreMaint

人工智能 云计算 5G 技术趋势 元宇宙

从 Nginx Ingress 窥探云原生网关选型

阿里巴巴云原生

阿里云 微服务 云原生

硅基仿生业务全面 Serverless 容器化,14万+问答库助力糖尿病科普

阿里巴巴云原生

阿里云 Serverless 云原生

Apache Tomcat 存在 JsonErrorReportValve 注入漏洞(CVE-2022-45143)

墨菲安全

安全漏洞 CVE

金融数字化为何需要低代码开发平台

力软低代码开发平台

重磅发布丨从云原生到Serverless,先行一步看见更大的技术想象力

阿里巴巴云原生

阿里云 Serverless 云原生

直播 | StarRocks 联合腾讯云分享 EMR-StarRocks 的降本增效之路

StarRocks

数据库

喜讯!云起无垠获评《2022年度十大新锐企业》

云起无垠

Fuzzing 2022年度十大新锐企业

一项针对数据库URI标准的提议_语言 & 开发_Jonathan Allen_InfoQ精选文章