不需要数据的数据库
数据库的众多优点之一是它们通常试图将数据在内部的表示方式(例如在磁盘上)与数据使用方式分开。甚至 不将数据存储在运行查询的同一硬件上已成为常态。
数据库在这方面已经做得非常出色,以至于这个术语现在几乎具有误导性。“数据库”暗示着某种坚固的东西,没有它数据就会消失。但数据始终存在,只是无名硬盘上的一些位。现代数据库提供的结构和可访问性完全独立于硬盘而存在。没错——大多数数据库中不再包含任何数据。
DuckDB是为这个时代构建的数据库,并且是一个特别可爱的数据库。
假设您运营一家自动驾驶出租车服务公司。并且您在 Blob 存储中维护着一个不断增长的有趣乘车模式数据集,您希望更好地了解这些模式。这些数据被拆分成每天的单独 Parquet 文件。您如何与分析师共享该数据集?
你可以直接把所有东西都邮寄给他们,但这样数据集就太大了。而且它会立即过期。如果这是一篇博客文章,你只需发送一个链接,但这里实际上没有任何东西可以链接。而向某人发送一百个指向 S3 中的原始 blob 的链接可能会破坏任何工作关系。
相反,你可以为他们建立一个小型数据库:
# Send import duckdb db = duckdb.connect("weird_rides.db") db.sql(""" CREATE VIEW weird_rides AS SELECT pickup_at, dropoff_at, trip_distance, total_amount FROM 's3://robotaxi-inc/daily-ride-data/*.parquet' WHERE fare_amount > 100 AND trip_distance < 10.0 """) db.close()
这将生成一个名为 weird_rides.db
的小文件,它不包含任何实际数据。它包含的是上述有关如何处理这堆 blob 的说明,就好像它是相关数据点的单个表格一样。
您还可以将此数据库文件发布到 Blob 存储,就在数据旁边。现在您有一个可以链接的内容:s3://robotaxi-inc/virtual-datasets/weird_rides.db
。
链接的接收者无需打开网络浏览器,而是启动他们自己的本地 DuckDB 会话,并 连接到引用的数据库。
# Receive import duckdb conn = duckdb.connect() conn.sql(""" ATTACH 's3://robotaxi-inc/virtual-datasets/weird_rides.db' AS rides_db (READ_ONLY) """)
conn.sql("SELECT * FROM rides_db.weird_rides LIMIT 5") # ┌─────────────────────┬─────────────────────┬───────────────┬──────────────┐ # │ pickup_at │ dropoff_at │ trip_distance │ total_amount │ # │ timestamp │ timestamp │ float │ float │ # ├─────────────────────┼─────────────────────┼───────────────┼──────────────┤ # │ 2019-04-01 00:03:20 │ 2019-04-01 00:03:54 │ 0.0 │ 240.35 │ # │ 2019-04-01 00:16:16 │ 2019-04-01 00:16:21 │ 0.0 │ 138.36 │ # │ 2019-04-01 02:01:22 │ 2019-04-01 02:01:28 │ 0.0 │ 192.96 │ # │ 2019-04-01 06:26:44 │ 2019-04-01 06:27:14 │ 0.0 │ 115.3 │ # │ 2019-04-01 07:28:12 │ 2019-04-01 07:28:12 │ 0.0 │ 127.2 │ # └─────────────────────┴─────────────────────┴───────────────┴──────────────┘
此查询是第一次从 S3 下载数据。DuckDB 支持 部分读取weird_rides
,这意味着只需要获取视图定义中使用的列,并且fare_amount > 100
可以使用类似的过滤器在下载过程中丢弃更多不相关的数据。
从接收方的角度来看,这种访问数据的方式将保持不变,几乎无论底层数据发生什么变化。格式变化 、不同的分区策略、架构变化——尽管如此,接收方的视图仍保持不变。
使用 DuckDB 作为数据云的浏览器,关系数据集始终只需一个超链接即可。
原文链接:https://www.nikolasgoebel.com/2024/05/28/duckdb-doesnt-need-data.html

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
这个 PHP 应用服务器看着有点新潮了!FrankenPHP
FrankenPHP 是一个基于 Caddy Web 服务器构建的现代 PHP 应用服务器。 FrankenPHP 特性包括:Early Hints、worker 模式、实时功能、自动 HTTPS、HTTP/2 和 HTTP/3 支持等 Early Hints:FrankenPHP 原生支持 103 Early Hints 状态码,可以将网页的加载时间缩短 30%。在普通模式和 worker 模式下都支持。 <?php header('Link: </style.css>; rel=preload; as=style'); headers_send(103); // your slow algorithms and SQL queries 🤪 echo <<<'HTML' <!DOCTYPE html> <title>Hello FrankenPHP</title> <link rel="stylesheet" href="style.css"> HTML; Earl...
- 下一篇
Java 的 AI 前景光明
InfoWorld 特约编辑 Paul Krill 最近采访了 Azul 首席执行官 Scott Sellers,谈及 Java 在蓬勃发展的 AI 领域的地位以及在当今软件世界中的地位。Azul Systems 是一家专门提供 Java 技术的计算机软件开发公司,与Oracle 保持着竞争关系。 当谈论 AI 时,最常被提及的编程语言往往是 Python。但 Scott 认为,Python 的地位并非不可撼动。“看看 Python 在 AI 中的应用,再看看它的作用,你会发现它就像胶水代码一样。其实 Python 本身做的事情并不多。它实际上主要是调用本地库或 GPU 库。接口才是关键所在。” 因此 Scott 断言,随着时间的推移,Java 在 AI 领域将可以和 Python 匹敌。“AI 越多地融入传统业务逻辑和那些需要在真正的应用程序级别发生的事情,就越能达到 Java 的 sweet spot,Java 的受欢迎程度就越高。而Python 在性能和规模等方面非常有限。” 目前的 Java 版本节奏是每六个月发布一次,同时将 Java 运行时和 Java 平台的快速发展与确定...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7设置SWAP分区,小内存服务器的救世主
- Mario游戏-低调大师作品
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 2048小游戏-低调大师作品
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题