首页 >>  正文

mysql查询数据库的表

来源:baiyundou.net   日期:2024-09-20

又一年过去了,生活还在继续,现在是反思去年数据库世界所发生事件的绝佳时机。

链接:https://ottertune.com/blog/2022-databases-retrospective/

声明:本文为 CSDN 翻译,未经允许禁止转载。

作者 | Andy Pavlo译者 | 王雪迎 责编 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

随着 DBMS 供应商之间基准性能竞争的逐渐平息,显现出一片寂静的景象。我喜欢写年终回顾,所以很高兴能和大家分享 2022 年数据库领域的亮点以及我对它们的看法。

大融资减少,大时代放缓

正如我去年所讨论的那样,2021 是数据库融资充足的一年。随着投资者继续寻找下一个 Snowflake,大量资金投入到开发新 DBMS 的初创企业中。

2022 年初,随着众多大型融资轮的发布,似乎是上一年的又一次重演。盛况始于 2 月,Timescale 发布 1.1 亿美元的 C 轮系列融资、Voltron Data 发布 1.1 亿美元种子和 A 轮系列融资,以及 Dbt Labs 发布的 2.22 亿美元 D 轮系列融资。

Starburst 于 3 月宣布 2.5 亿美元的 D 轮系列融资,用以扩展其 Trino 产品。到了 5 月,Imply 为其商业版 Druid 发布了价值 1 亿美元的 D 轮系列融资。DataStax 在 6 月份的 IPO 中获得了 1.15 亿美元的资金。最后,SingleStore 在 7 月放弃了 1.16 亿美元的 F 轮系列融资,然后在 10 月又增加了 3000 万美元。

在 2022 年上半年,还有几家规模较小的公司推出了令人印象深刻的 A 轮系列融资,包括 Neon 为无服务器 PostgreSQL 产品进行的 3000 万美元 A 轮系列融资、ReadySet 为其查询缓存层产品进行的 2900 万美元的 A 轮系列融资、Convex 为其基于 PostgreSQL 构建的应用程序框架进行的 2600 万美元的 A 轮系列融资,以及 QuestDB 时间序列 DBMS 的 1500 万美元 A 轮系列融资。尽管我们没有构建新的 DBMS 或相关架构,但 OtterTune 在 4 月份发布了自己的 1200 万美元 A 轮系列融资。

但随后,大规模融资在 2022 年下半年戛然而止。除了早期初创企业的融资规模较小,具有丰富经验公司的融资额也没超过 9 位数。10 月,RisingWave 为其流处理引擎进行了价值 3600 万美元的 A 轮系列融资。Keebo 为他们的 Snowflake 查询加速器筹集了 1050 万美元的 A 轮系列融资。11 月,我们看到 MotherDuck 宣布了 4500 万美元的种子 + A 轮系列融资,用于 DuckDB的商业化云版本,之后 EdgeDB 在 11 月进行的 1500 万美元的 A 轮系列融资。最后,SurrealDB 兄弟获得了 600 万美元的种子轮融资(这并不是一个详尽的列表,我可能还错过了一些)。

数据库市场中唯一一个值得注意的金融事件是,

我的看法:

与 2021 相比,2022 年大型融资轮减少有两个原因:

最显而易见的原因是整个科技行业已经降温,这部分是由于对通胀、利率和加密经济崩溃的担忧。

另一个原因是,在大环境变得糟糕之前,每一个有能力拿下大轮融资的人都已经这么做了。例如,Starburst 在 2021 年进行了价值 1 亿美元的C轮系列融资之后,又于 2022 年进行了 D 轮融资。

在过去两年中筹集了大量资金的数据库公司,需要快速筹集到更多资金,以保持增长势头。还有人评论说,这些公司得到的金额令人吃惊。坏消息是,除非整个科技行业的环境有所改善,大型机构投资者再次开始当街撒钱,否则这些数据库公司将陷入困境,市场无法维持如此多的数据库独立软件供应商(ISV)。

对于这些估值数十亿美元的公司来说,唯一的出路是 IPO,否则就是破产。问题是对于大多数此类公司来说,收购它们太贵了,除非风投愿意大幅削减其估值。此外,进行大型并购的主要科技公司(如亚马逊、谷歌、微软等)已经拥有自己的云数据库产品,因此尚不清楚谁将会收购这些数据库初创企业。

亚马逊在 2021 以 20 亿美元的估值收购 Clickhouse 是没有意义的,因为他们已经从 Redshift 每年赚了数十亿美元——这个问题并非 OLAP 数据库公司独有,OLTP 数据库公司很快也将面临同样的问题。

我并不是唯一一个对数据库初创企业的命运做出如此悲观预测的人。Gartner 分析师预测,到 2025 年,50% 的独立 DBMS 供应商将倒闭。我认为这有明显的偏见,但我认为能够生存下来的,将是那些努力改进或增强 DBMS,而不是取代它们的公司(例如,dbt、ReadySet、Keebo 和 OtterTune 等)。

我无法评价 SPAC 的“快速 IPO”方式(MariaDB 的上市方式)是不是一个好主意,此类金融手段不属于我的专业领域(即数据库)。但由于这与美国前总统对其社交媒体公司所做的事情类似,我认为这可能是一个见不得人的交易。

区块链数据库仍然是一个愚蠢的想法

有种说法很盛行,即关于 Web3 如何代表人们构建新应用程序的方式发生了根本变化。Web3 运动的核心宗旨是在区块链数据库中存储状态,而区块链本质上是去中心化的日志结构数据库(也就是账本),它使用 Merkle 树的某些变体和 BFT 共识协议来维护增量校验和,以确定要存储到数据库中的下次更新。这些增量校验和是区块链确保数据库日志记录不可变的方式:客户端使用这些校验和来验证以前的数据库更新没有被更改。

区块链是先前想法的巧妙融合,但认为去中心化账本就是每个人无论如何都应该构建 OLTP 应用的想法是错误的。从数据库的角度来看,对于加密货币以外的任何实际用例,它们都无法提供超过现有 DBMS 技术的任何东西。此外,任何声称“在区块链数据库中提供比现有 DBMS 更好的安全性和可审计性”的说法都是错误的。

因此,如果加密货币是区块链数据库的最佳用例,那么 2022 年的加密市场崩溃也于事无补,这只会进一步阻碍了它们的未来。在本次讨论中,我忽略了 FTX 的崩溃,因为它似乎是直接的欺诈行为,与数据库无关。然而我要指出的是,FTX 和所有其他加密货币交易所一样,并没有在区块链数据库上运行业务,而是使用 PostgreSQL。但其他与加密货币无关的区块链数据库使用案例,如贸易和游戏平台,都由于其不切实际或欺诈而失败。

我的看法:

评估一项技术时要遵循的一条规则是,一旦企业发布了有关它的电视广告,它就不再是“新的”。举个例子,如果当 IBM 开始宣传某项技术时,它还没有令人信服的使用案例,那么就永远不会有了:IBM 在 2002 年的一次商业广告中宣传 Linux 是一个热门的新事物,但当时已有数千家公司(包括谷歌)将其作为主要服务器操作系统。

因此,当 IBM 发布其 2018 年区块链商业广告时,我就知道这项技术不会超越加密货币,因为去中心化区块链可以解决集中式 DBMS 无法解决的问题。甚至,今年 IBM 宣布关闭其与航运巨头马士基(Maersk)的供应链 IT 基础设施改造项目(他们在商业广告中大肆宣传过此项目),在我看来也并不奇怪。

与由可信机构控制的、只允许可信客户端直接连接的、精心编写的事务性 DBMS 相比,区块链的效率非常低。除了加密货币或设置陷阱等非法活动外,几乎所有现实世界的互动都以这种方式进行。我们需要信任他人,建立一个运转良好的社会。例如,我授权托管 OtterTune 网站的公司从我们的信用卡中扣款,他们信任云提供商托管他们的软件——但没有人需要区块链数据库来进行这些交易。

从工作量证明(PoW)转换为能源密集度较低的权益证明(PoS)共识机制,确实提高了区块链数据库的性能,但这只会影响数据库的吞吐量,区块链事务延迟仍然以几十秒为单位。如果解决这些长延迟的方法是使用参与者较少的 PoS 区块链,那么应用程序最好只使用 PostgreSQL,并对这些参与者进行身份验证。

感兴趣的话,可以参阅 Tim Bray 的这篇精彩文章(https://www.tbray.org/ongoing/When/202x/2022/11/19/AWS-Blockchain),了解他与 AWS 高层就区块链是否存在可行进行的内部讨论。请注意,他说 AWS 在 2016 年便得出结论,即区块链数据库是一种寻找问题的解决方案,比 IBM 推出区块链商业广告还早两年。不过尽管 AWS 最终在 2018 年发布了 QLDB 服务,但它与区块链不是一回事,它是一个不使用 BFT 共识的集中式可验证数据库。客户对 QLDB 的接受程度并不高,尤其是与亚马逊极为成功的 Aurora 产品相比。

新数据库系统

2022 年有几个关于新 DBMS 软件的重要发布。

Google AlloyDB

最大的重磅炸弹是 5 月份谷歌云发布了新的数据库服务。AlloyDB 并非构建在 Spanner 之上,而是 PostgreSQL 的一个修改版本,它将计算层和存储层分离,并支持直接在存储中处理 WAL 记录。

Snowflake Unistore

6 月,Snowflake 发布了他们带有“混合表”的新 Unistore 引擎,以支持 DML 操作的低延迟事务。当查询更新表时,更改会传递到 Snowflake 的列式存储。对此,SingleStore 方面有些不满,表示他们在这个领域拥有一些专利,但没有任何结果。

MySQL Heatwave

在 Oracle 意识到亚马逊从 MySQL 中赚到的钱比他们还多之后,他们最终决定在 2020 年为 MySQL 构建自己的云产品。但他们并不只是制作一个 RDS 的克隆,而是使用一个名为Heatwave的内存矢量化 OLAP 引擎来扩展 MySQL。2021年,Oracle 宣布他们的 MySQL 服务也支持自动数据库优化(但与 OtterTune 提供的不同)。去年,Oracle 终于意识到他们不是领先的云供应商,并同意在 AWS 上支持 MySQL Heatwave。

Velox

Meta 于 2020 年开始构建 Velox,作为 PrestoDB 的新执行引擎。两年后,他们宣布了这个项目,并发表了一篇关于它的 VLDB 论文。Velox 不是一个完整的 DBMS:它不带 SQL 解析器、元数据目录、优化器或网络支持。相反,它是一个具有内存池和存储连接器的 C++ 可扩展执行引擎,可以使用 Velox 构建一个完整的 DBMS。

InfluxDB Iox

与带有 Velox 的 Meta 一样,Influx 团队在过去两年中一直致力于开发他们的新 IOx 引擎。最终他们宣布,将于 10 月推出带新引擎的 GA 版本。InfluxDB 基于 DataFusion 和 Apache Arrow 从头开始构建 IOx。值得庆幸的是,我在 2017 年警告 Influx 的 CTO,使用 MMAP 是个坏主意,之后他们也在新系统中放弃了 MMAP。

我的看法:

数据库是我生命中第二重要的东西,所以我很高兴看到去年的所有发展。

我对 AlloyDB 的热评是,它是一个简洁的系统,并且投入了大量的工程设计,但我仍然不知道它有什么新奇之处。AlloyDB 的架构类似于 Amazon Aurora 和 Neon,其中 DBMS 存储具有额外的计算层,可以独立于计算节点处理 WAL 记录。尽管谷歌云已经拥有可靠的数据库组合(如 Spanner 和 BigQuery),但它觉得有必要建立 AlloyDB,以试图赶上亚马逊和微软。

值得关注的长期趋势是 Velox、DataFusion 和 Polars 等框架的激增。连同像 Substrait 等项目,这些查询执行组件的商品化意味着所有 OLAP DBMS 在未来五年内将大致相当。与其完全从头开始构建新的 DBMS,或者强行对现有系统做分支(例如 Firebolt 对 Clickhouse 所做的分支),不如使用 Velox 这样的可扩展框架。这意味着每个 DBMS 都将具有十年前 Snowflake 所独有的矢量化执行能力。由于在云中,存储层对每个人来说都是相同的(例如 Amazon 控制 EBS/S3),DBMS 产品之间的关键区别将难以量化,例如 UI/UX 方面和查询优化。

一位数据库先驱的逝去

更令人沮丧的是,2022 年 7 月,我们失去了 Martin Kersten。Martin 是 CWI 的一名研究员,也是几个有影响力的数据库项目领导者,包括 1990 年代的第一个分布式内存 DBMS(PRISMA/DB)和 2000 年代的第一个列式 OLAP DBMS(MonetDB)。Martin 于 2020 年被荷兰政府授予皇家爵士头衔,特别表彰他在数据库方面做出的贡献。

MonetDB 代码库是其他几个 OLAP 系统项目的基础。2000 年代后期,Peter Boncz 和 Marcin Żukowski 将其分支为 MonetDB/X100,并将其商业化为 Vectorwise(现在称为 Actian Vector)。之后 Marcin 使用他在 MonetDB 原始代码上开发的许多技术,与他人共同创立了 Snowflake。最近,Hannes Mühleisen 创建了一个名为 MonetDBLite 的嵌入式 MonetDB 版本,然后他再次将其重写为现在的 DuckDB。

Martin 对现代数据库系统的贡献怎么强调都不为过。如果你在使用任何现代分析型 DBMS(例如 Snowflake、Redshift、BigQuery、Clickhouse),那么你必将受益于 Martin 及其学生在过去 30 年开发中取得的许多进展。

我的看法:

我承认,与 Mike Stonebraker 这样的人相比,Martin 可能并不为数据库研究界以外的人所熟知。我一直认为 Martin 是欧洲版的 Stonebraker:他们都是多产的数据库研究人员,又高又瘦,戴着眼镜,年龄相仿。

除了研究之外,Martin 总会花上大把时间,并渴望与他人讨论数据库架构。我最后一次见到他是在疫情之前的 VLDB 2019。他和我争论了将近一个小时,说强调他认为在 MonetDB 中使用 MMAP 是正确的选择——他断言,因为 MonetDB 专注于只读 OLAP 工作负载,所以 MMAP 就足够了。我感觉很糟糕,因为他还要说服在 Youtube 上观看我数据库课程的学生,随后我便给他发邮件,告诉他为什么我认为 MonetDB 的设计并不完善。

明年将是光明的一年

我总想以愉快的方式结束自己的年终回顾文章,数据库本该让人们对自己的生活感觉良好,因为它们代表了科学和工程突破的顶峰,使我们能够组织有关现代生活各个方面的数据。就我个人而言,2022 年发生了很多变化:

1.OtterTune 在四月份推出了我们的 A 轮系列融资。

2.我的 1 号博士生作为一名新的数据库教授加入了密歇根大学。

3.7 月,我被卡内基梅隆大学“永久雇用”(尽管我仍然受到该校终身教职员工“道德败坏”条款的约束)。

4.9 月我重返全职教学岗位。

在我的亲生女儿开始学前班后,我还从她那里得了四次非 COVID 鼻窦感染。

我对 OtterTune 明年的发展方向感到兴奋。我们计划在 2023 年上半年宣布全面重写我们的数据库自动化服务。我已经发布了我们目前正在开发的新功能预览。由于跨州运输水獭,我们的唱片公司也遇到了一些法律问题,但我们已经解决了,并希望在 2023 年发行新专辑。

(P.S.:一如既往,请不要忘记在假期期间对数据库运行 ANALYZE,或者让 OtterTune 为你自动解决问题。)

《2022-2023 中国开发者大调查》重磅启动,欢迎扫描下方二维码,参与问卷调研,更有 iPad 等精美大礼等你拿!

","force_purephv":"0","gnid":"962025e8eaa9d337d","img_data":[{"flag":2,"img":[{"desc":"","height":"80","s_url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752_1.gif","title":"","url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752.gif","width":"640"},{"desc":"","height":"683","title":"","url":"https://p0.ssl.img.360kuai.com/t01e3d3b2bb17ebcd8c.jpg","width":"1024"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1673607087000,"pure":"","rawurl":"http://zm.news.so.com/2b2725711ee0fed2de5c8ecf7adbcc91","redirect":0,"rptid":"1358152b74e201f0","s":"t","src":"CSDN","tag":[{"clk":"ktechnology_1:ibm","k":"ibm","u":""},{"clk":"ktechnology_1:martin","k":"martin","u":""},{"clk":"ktechnology_1:区块链","k":"区块链","u":""},{"clk":"ktechnology_1:mysql","k":"mysql","u":""}],"title":"Oracle 发力 MySQL,MariaDB 成功上市,大规模融资锐减 | 解读数据库的 2022

窦显卫1232mySQL怎么查询所有表的字段呢? -
弓民萧18332322927 ______ Java的写法 String query = "SELECT * FROM " + ITEM_TABLE + " WHERE item_id = 1"; rs = st.executeQuery(query); ResultSetMetaData metaData = rs.getMetaData(); HashSet<String> colNames = new HashSet<String>(); for (int j = 1; j <= ...

窦显卫1232怎样获取mysql数据库里所有表的名字 -
弓民萧18332322927 ______ 用sql获取数据库中所有的表名的方法: 1、oracle下:select table_name from all_tables; 2、MySQL下:select table_name from information_schema.tables where table_schema='csdb' and table_type='base table'; 3、sql server下:select name from sys.tables go

窦显卫1232如何查看mysql所有的数据库 -
弓民萧18332322927 ______ 第一步:首先是查看mysql数据库的端口号,使用命令show 第二步:查看有哪些数据库, 第三步:查看mysql数据库所有用户, 第四步:查看某个数据库中所有的表

窦显卫1232查询出Mysql数据库中一个表的所有字段???? -
弓民萧18332322927 ______ --通过如下语句得到当前Sql server中所有的数据的名称: use master select [name] from [sysdatabases] order by [name] go-- 查询数据库中的所有用户表 use [DBname] select [id], [name] from [sysobjects] where [type] = 'u' order by [name]--通过上...

窦显卫1232mysql内如何查询表的个数 -
弓民萧18332322927 ______ mysql> SELECT table_name, table_type, engine -> FROM information_schema.tables -> WHERE table_schema = 'test' -> ORDER BY table_name DESC; -> //+--------------------+------------+--------+ | table_name | table_type | engine |+--------------------+--...

窦显卫1232mysql 查询整个数据库中某个特定值所在的表和字段的方法 -
弓民萧18332322927 ______ 一个表一个表,一个字段一个字段的去查,比如:select * from 表1 where 字段1=值把表导入到sql文件里面,然后打开这个文件,用"查找"的功能找这个...

窦显卫1232mysql怎么查看数据库有多少张表 -
弓民萧18332322927 ______ SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'dbname' GROUP BY table_schema;dbname是数据库的名称

窦显卫1232mysql查询一个数据库中有特定前缀的表有多少个 -
弓民萧18332322927 ______ 使用 show tables like 'a_%'; 既可获得你的结果.我在我的服务器上验证的语句如下:mysql> show tables like 'w%';+--------------------+ | Tables_in_web (w%) |+--------------------+ | web_link | | web_vist_cnt | | web_vist_stat |+--------------------+3 rows in set (0.00 sec)

窦显卫1232如何从mysql数据库中获取一个表的表结构 -
弓民萧18332322927 ______ 列出表(列)结构: mysql< DESCRIBE tableName; mysql< DESCRIBE tableName columnName; mysql< DESC tableName; mysql< SHOW COLUMNS FROM tableName; % mysqlshow dbName tableName!

窦显卫1232mysql中怎么查看一个表中的数据 -
弓民萧18332322927 ______ mysql中显示一个表中的数据: 查看所有表 show tables 查看表中内容 select * from table_name

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024