【问题标题】:CakePHP Database - MyISAM, InnoDB, or Postgresql [closed]CakePHP 数据库 - MyISAM、InnoDB 或 Postgresql [关闭]
【发布时间】:2013-09-06 01:18:28
【问题描述】:

我的所有项目都一直使用 MyISAM,但在开始下一个项目之前,我正在寻找经验丰富的意见。

我即将开始一个项目,该项目将处理许多表中的数十万行。 (随着时间的推移,一些表甚至可能有数百万行)。该项目主要需要快速读取访问权限,因为它是一个 Web 应用程序,但快速写入显然没有什么坏处。它需要非常可扩展。

该项目还将处理敏感和重要的信息,这意味着它需要可靠。 MySQL 似乎因忽略验证而臭名昭著。

该项目将使用 CakePHP 作为框架,我很确定它同样支持 MySQL 和 Postgresql,但如果有人对此有异议,请告诉我。

我很想使用 InnoDB,但我听说它的性能很差。 Postgresql 似乎是最可靠的,但也没有 MyISAM 快。

如果我能够将服务器的 MySQL 版本升级到 5.5,那么 InnoDB 会比 Postgres 更安全吗?或者 MyISAM 是否仍然更适合大多数需求并且比其他更可扩展?

【问题讨论】:

  • 这个问题不适合在这里,因为答案将基于意见。我会说,虽然 MyISAM 在某些情况下可以更快,但缺乏外键约束和事务是相当有限的。
  • 我意识到这可能是主观的,但也有一些事实导致了这些观点。外键约束是什么意思?
  • 对不起,我应该澄清这个问题。 CakePHP 具有关联的模型并相应地创建 SQL 查询。如果表本身知道它们的关系,会有所不同吗?或者这真的会影响性能吗?
  • @LukeSapan 阅读postgresql.org/docs/current/static/ddl-constraints.html。 FK 约束可防止在记录之间创建悬空关系,并且应该始终使用,除非您有充分的理由不这样做。如果 CakePHP 不将它们创建为 DDL 生成的一部分,我会寻找另一个框架。

标签: mysql database performance postgresql innodb


【解决方案1】:

这真正需要的唯一答案是“不是 MyISAM”。如果您关心您的数据,则不会。毕竟,/dev/null 的性能确实令人惊叹,但它也不符合您的可靠性要求;-)

其余的是通常的 MySQL 与 PostgreSQL 意见,每次有人询问新口味时我们都会关闭,因为它确实不会带来太多有用的东西。

比您的数据库选择更重要的是您如何使用它:

  • 您是否在 Redis 或 Memcached 之类的东西中缓存了可能会有点陈旧的常见命中数据?

  • 您是否避免从低效的 ORM 中选择“n+1”个选择,以支持一些理智的联接?

  • 您是否避免选择大量不需要的数据?

  • 您是进行选择性缓存失效(我使用LISTENNOTIFY),还是在发生变化时刷新整个缓存?

  • 您是否最小化了分页,并且当您必须分页时,是否基于上次看到的 ID 而不是偏移量? SELECT ... FROM ... WHERE id > ? ORDER BY id LIMIT 100 可以比SELECT ... FROM ... ORDER BY id OFFSET ? LIMIT 100 快得多。

  • 您是否监控查询性能并手动调整问题查询、创建适当的索引等?

(标记为社区 wiki,因为我对这个问题进行了近距离投票,除非它是 CW,否则似乎不适合近距离投票和回答)。

【讨论】:

  • 哈哈谢谢。我仍然担心在我离开 MyISAM 后页面将永远加载,但这已成为过去,对吧?
  • @LukeSapan 好吧,对于高度可扩展的重读负载,您应该研究一个缓存层——memcached、redis 等。我使用 PostgreSQL 和触发器,将 NOTIFY 事件发送给监听它们的工作人员并在数据库更改时使缓存条目无效,但根据您的需要有各种方法。我不使用 (Cake)PHP,所以我不知道这种方法是否适合那里。
  • 非常感谢您富有洞察力的回答!
  • 另外我从来没有做过缓存层的工作,但是 CakePHP 本身就支持 Memcached 和 Redis,所以我一定会研究一下。
猜你喜欢
  • 2012-05-15
  • 2011-12-20
  • 1970-01-01
  • 2011-01-08
  • 2011-04-04
  • 2015-09-26
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多