【问题标题】:Mysql vs Postgres Read Operations [closed]Mysql vs Postgres读取操作[关闭]
【发布时间】:2015-12-23 06:59:24
【问题描述】:

我们正在运行一个将 MySql 与 Engine InnoDB 一起使用的应用程序,并且我们计划改进该应用程序(源代码),所以我正在研究 postgres,因为它似乎很受欢迎,并得到了世界各地许多人的建议。但有一些事情真的让我搁置了:

Taken from this thread.

何时不使用 PostgreSQL

速度:如果您只需要快速读取操作,那么 PostgreSQL 不是 工具。

简单设置:除非您需要绝对的数据完整性,否则 ACID 合规性或复杂设计,PostgreSQL 对于 简单的设置。

复制:除非你愿意花费时间、精力和 资源,使用 MySQL 实现复制可能更简单 缺乏数据库和系统管理经验的人。

所以,关于速度,我不确定快速读取操作到底意味着什么。这意味着简单的读取操作还是复杂的?因为我也读过 postgres 在执行之前优化查询,所以不确定我是否真正理解了这一点或遗漏了什么?

最后,我不确定,为应用程序选择 Postgres 或 Mysql 究竟应该寻找哪些因素?

注意:我已阅读并尝试了解 postgres 和 mysql 之间的区别,但无法得出任何结论,这就是我在这里发布问题的原因。另外,我不是 DBA。

【问题讨论】:

  • 您能告诉我们更多有关该应用程序及其数据需求的信息吗?您粘贴的简介基本上是说 Postgres 根据您的要求可能会过大。
  • 太宽泛,太自以为是。当心。
  • @TimBiegeleisen 这是一个电子商务应用程序,主要侧重于阅读而不是写作。
  • 对于电子商务应用程序,我认为数据完整性非常重要......
  • 请阅读 Uber 对 Postgres 与 MySQL 的非常详细的评论。 eng.uber.com/mysql-migration。 MySQL 在实现方面是比 Postgres 更好的产品。 Postgres 的非可变元组架构是一个主要瓶颈。一个小的更新会向所有索引发送涟漪效应。复制设计是灾难性的,有太多数据传送到副本。 WAL 数据被发送到副本而不是逻辑更新这一事实意味着,任何正在获取 WAL 更新并启动事务的副本可能仅仅因为 READ 就必须阻止执行 WAL 更新。

标签: mysql database postgresql compare


【解决方案1】:

PostgreSQL 可以使用快速压缩方案动态压缩和解压缩其数据,以在分配的磁盘空间中容纳更多数据。压缩数据的好处,除了节省磁盘空间外,读取数据占用更少的IO,从而导致数据读取速度更快。

Mysql:MyISAM 表存在表级锁定,不支持数据持久性、崩溃恢复、事务或外键等 ACID 特性。之前声称它在只读或重读操作中表现更好,但现在不一定如此。

另见Benchmarking PostgreSQL vs. MySQL performance

这在很大程度上取决于您的表结构如何维护以及您如何组织数据。

Pinterest though using mysql 以更快的读取速度管理海量数据。

【讨论】:

  • 谁提到他们想使用 MyISAM ?
  • 刚刚提到了 MyISAM。突出显示了我回答的动机。
  • 最好投票接近,因为过于宽泛或固执己见。除非你有各种引擎的基准(不是你选择提到 MyISAM 的那个笨拙的引擎),并且可以与 WebScaleSql、Tukodb、Percona、fractals 等对话。另外,这只是比较的皮毛
  • @SomnathMuluk 感谢您抽出时间回复 Drew 提到的广泛问题,并投票结束。不确定,哪里可以问这么广泛的问题。好吧,回到正题,你分享的基准测试链接,我已经浏览过了,看起来我真的不应该使用 postgres。作者似乎偏向mysql(不知道为什么)。我一定会通过 mysql 链接阅读 pinterest。但是我怎么可能自己做基准测试呢?有什么办法吗?
  • @ssc:我喜欢 Pinterest 扩展以支持 mysql 上的大量读取请求的方式。这两个数据库已经有很多基准测试结果。它高度依赖于您的应用程序结构以及对表进行读取的方式。您还可以使用 MongoDb 等非关系数据库来获得高读取速度。您应该根据您的应用程序和数据库结构提出问题。缩小您的问题范围。
【解决方案2】:

一切都取决于您的应用程序。如果您正在创建 Web 应用程序并且这可能更复杂,那么您正在使用许多带有连接的表,即实时数据。在这种情况下,您可以选择 Postgresql。

PostgreSql 特点:ORDBMS,MVCC,也可以通过平台原生C库的Routines以及大对象的Streaming API,Table继承,统一数据库服务器存储引擎,在您使用许多连接的复杂操作中更加可靠和快速,锁定以避免竞争条件,具有很多功能,例如 --> 文本搜索 to_tsvecter() 和 to_tsquery(),以 json 格式获取数据,具有共享缓冲区缓存、索引、触发器、备份、主从复制等等。

如果您的应用程序是小型移动平台,您使用的查询类型相似,此应用程序的用户不多。在这种情况下,您可以选择 Mysql。

Mysql 特点:RDBMS,使用 JDBC ODBC,类似类型的查询快速,主从复制。

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2010-12-10
    • 2015-02-04
    • 1970-01-01
    • 2013-09-17
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多