镁伽科技黄瑜清:智能自动化给生命科学带来巨大变革
06-18
简介 在 Arctype 社区中,我们解答了很多关于数据库性能的问题,特别是 Postgres 和 MySQL 之间的性能问题。性能是管理数据库中一项关键而复杂的任务。
它可能受到配置、硬件或操作系统的影响。 PostgreSQL和MySQL的稳定性和兼容性取决于我们的硬件基础设施。
并非所有关系数据库 (RDBMS) 都是一样的。 PostgreSQL和MySQL虽然在某些地方是相似的,但是在不同的使用场景下却有着各自的性能优势。
虽然我们在上一篇文章中讨论了它们之间的一些基本差异,但性能方面还有更多差异值得讨论。在本文中,我们将讨论工作负载分析和运行查询。
然后我们将进一步解释一些可以提高 MySQL 和 PostgreSQL 数据库性能的基本配置。最后,我们总结一下 MySQL 和 PostgreSQL 之间的一些关键区别。
目录 如何衡量性能 查询 JSON 性能 索引开销 数据库复制和集群并发 总结 如何衡量性能 MySQL 因其出色的读取速度而受到称赞,尽管混合使用读写操作时并发性较差。 PostgreSQL(通常称为 Postgres)将自己描述为最先进的开源关系数据库,并已发展成为符合标准且功能丰富的数据库。
此前,Postgres 的性能更加平衡,即读取速度普遍比 MySQL 慢,但后来它有所改进,现在可以更高效地写入大量数据,从而实现更好的并发处理。 MySQL 和 Postgres 的最新版本已经稍微消除了两个数据库之间的性能差异。
使用 MySQL 中旧的 MyIsam 引擎读取数据非常快。不幸的是最新版本的 MySQL 并没有使用这个引擎。
但是,如果您使用InnoDB(允许键约束、事务),则差异可以忽略不计。 InnoDB 中的功能对于拥有大量用户群的企业或应用程序至关重要,因此使用旧引擎不是一个选择。
但随着MySQL版本的不断更新,这种差异变得越来越小。数据库基准测试是一种可重复的实验框架,用于表示和比较数据库系统或这些系统上的算法的性能(时间、内存或质量)。
这个实用的框架定义了被测系统、工作负载、指标和实验。在接下来的四节中,我们讨论每个数据库的性能优势。
Postgres 中的 JSON 查询速度更快 在本节中,我们将了解 PostgreSQL 和 MySQL 之间的基准测试差异 步骤 创建一个项目(Java、Node 或 Ruby),其数据库使用 PostgreSQL 和 MySQL。创建一个JSON对象,然后执行读写操作。
整个 JSON 对象大小约为 14 MB,大约创建数据库中的条目。统计 PostgreSQL: 平均时间(ms): Write: .25, Read: 31.65, Update: 26.26MySQL: Average time (ms): Write: .05, Read: 49.99, Update: 62.45 从上面的结论可以看出PostgreSQL在处理JSON时比MySQL表现更好的数据,这当然是PostgreSQL的亮点之一。
我们可以对数据库进行频繁的操作(读、写、更新)来了解其性能,然后选择最好的一个在您的项目中使用。从上面的测试数据结果我们可以知道,虽然MySQL比PostgreSQL快,但这只是在特定条件下。
索引 索引是任何数据库最重要的功能之一。数据库查询数据时,带索引的查询比不带索引的查询要快很多。
不过索引也会给数据库带来额外的开销,所以我们一定要明智地使用索引,不要盲目使用。在没有索引的情况下,数据库在查找数据时会进行全文检索(Full Text),即从第一行开始逐行比较查找。
这种情况下,数据量越大,查询速度就越慢。 PostgreSQL 和 MySQL 都有一些处理索引的特定方式: B 树索引:PostgreSQL 支持 B 树索引和哈希索引。
同时,PostgreSQL还支持以下功能: 表达式索引:我们可以为表达式或函数创建索引,而不是使用字段。本地索引:索引只是表的一部分。
假设PostgreSQL有一个用户表,表的每一行代表一个用户。那么表可以这样定义: 代码语言: javascript copy CREATE TABLE users (id SERIAL PRIMARY KEY, email VARCHAR DEFAULT NULL, name VARCHAR);假设我们为表创建以下索引: 上述两个索引有什么区别?索引#1 是本地索引,索引#2 是表达式索引。
正如 PostgreSQL 文档所述,“本地索引建立在由条件表达式(称为本地索引的谓词)定义的表中行的子集上。该索引仅包含满足谓词的那些表行的条目。
使用本地索引的主要原因是避免对常见值建立索引,因为通常发生在代表所有表行的百分之几的值上的查询无论如何都会遍历表的大部分内容,因此使用索引的好处可以忽略不计。策略是创建完全排除这些行的部分索引,从而加快使用索引的查询的速度,因为不需要索引,所以这也会使许多写入操作更快。
在所有情况下均已更新。”——摘自 PostGres 文档 MySQL: :MySQL 对大多数索引使用 B 树数据结构(PRIMARY KEY、UNIQUE、INDEX、FULLTEXT)。
R-Tree 数据结构也用于特殊情况。 MySQL还支持Hash索引,在InnoDB引擎下使用FULLTEXT索引时,顺序是相反的。
数据库复制 PostgreSQL 和 MySQL 之间的另一个性能差异是复制。复制是指将数据从一个数据库复制到另一台服务器上的数据库。
这种数据分布意味着用户现在可以访问数据而不会直接影响其他用户。数据库复制的最大困难之一是协调整个分布式系统的数据一致性。
MySQL 和 PostgreSQL 提供了多种数据库复制选项。除了一个主服务器、一个备用数据库和多个备用数据库之外,PostgreSQL 和 MySQL 还提供以下复制选项: 多版本并发控制 (MVCC) 当用户同时对数据库进行读写操作时,这种现象称为并发现象。
因此,多个客户端同时读取和写入会导致各种边缘情况/竞争条件,即先读取然后写入同一记录 X 和许多其他条件。各种现代数据库利用事务来缓解并发问题。
Postgres 是第一个引入多版本并发控制 (MVCC) 的 DBMS,这意味着读取永远不会阻止写入,反之亦然。这一特性是企业更喜欢 Postgres 而不是 MySQL 的主要原因之一。
“与大多数使用锁进行并发控制的数据库不同,Postgres通过使用多版本模型来维护数据一致性。此外,在查询数据库时,无论底层数据状态当前处于什么状态,每个事务看到的都是数据快照(数据库版本) )和以前一样,它可以防止事务看到由(其他)并发事务更新对同一数据行造成的不一致数据,从而为每个数据库会话提供事务隔离” - 来自 PostGres 文档 MVCC 允许多个读取器和写入器与一个数据进行交互。
Postgres 数据库同时进行,从而避免每次有人与数据交互时都需要读写锁。一个附带的好处是这个过程可以显着提高效率。
MySQL采用InnoDB存储引擎,支持对同一行的写入和读取互不干扰。每次MySQL向一行写入数据时,它也会向回滚段写入一个条目。
此数据结构存储用于将行恢复到先前状态的回滚日志。之所以称为回滚段,是因为它是用来处理回滚事务的工具。
“InnoDB 是一个多版本存储引擎:它保留有关已更改行的旧版本的信息,以支持并发和回滚等事务功能。这些信息存储在表空间中称为回滚段的数据结构中(在Oracle)使用回滚段中的信息来执行事务回滚中所需的撤消操作。
” - 摘自 MySQL 文档 总结 在本文中,我们解决了 PostgreSQL 和 MySQL 之间的一些性能差异。虽然数据库性能会受到硬件、操作系统类型等影响,但最重要的是你对目标数据库的理解。
PostgreSQL 和 MySQL 都有各自的优点和缺点,但了解哪些功能适合项目并集成它们最终可以提高性能。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
06-18
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用