10

我知道这是非常广泛的,所以让我给你设置并具体说明我的重点。

环境:

我正在使用 MYSQL 处理现有的 PHP 应用程序。表几乎都使用 MISAM 引擎并且大部分包含数百万行。最大的表之一使用 EAV 设计,这是必要的,但会影响性能。该应用程序的编写是为了最好地利用 MYSQL 缓存。它在每个页面加载时请求相当数量的请求(部分是因为这个),并且足够复杂,必须在每个页面加载时遍历整个数据库的大多数表。

优点:

  • 免费
  • MISAM 表支持对应用程序很重要的全文索引

缺点:

  • 按照设置的方式,MYSQL 仅限于一个 CPU 用于整个应用程序。如果运行一个非常苛刻的查询(或服务器负载很大),它将排队所有其他查询,使站点无响应
  • MYSQL 缓存和缺少“WITH”或“INTERSECT”意味着我们必须分解查询以更好地使用缓存。从而使查询的数量成倍增加。例如,在具有数百万行的多个表上使用子查询(即使具有良好的索引)对于当前/即将到来的负载和上面列出的约束(CPU 使用率)来说是一个大问题

感觉需要在即将到来的一年扩大规模,但不一定准备好立即支付许可费用,我一直在考虑重写应用程序和切换数据库。

正在考虑的三个选项是继续使用 mysql 但使用 INNODB 引擎,这样我们可以利用更多的 CPU 能力。当我们需要向上扩展 4Gb 数据库、1Gb RAM 或 1 个 CPU 限制(所有这些我们还没有达到)时,适应 Oracle XE 并获得许可证。或者适应PostgreSQL

所以问题是:

  • 在这三种情况下,失去全文索引会如何影响性能(oracle 或 postgreSQL 是否有等价物?)
  • oracle 和 postgreSQL 如何利用子查询、WITH 和 UNION/INTERSECT 语句的缓存
  • Oracle 和 PostgreSQL 如何利用多核/cpu 能力(如果/当我们获得 Oracle 许可证时)

我想这已经有很多要回答的了,所以我会在这里停下来。如果有赞美的链接,我不介意简单/不完整的答案。

如果您需要更多信息,请告诉我

在此先感谢各位,感谢您的帮助。

4

1 回答 1

6

PostgreSQL 支持全文搜索和索引。详情在这里

它可以使用任意数量的 CPU 内核。它为每个会话创建单独的流程 + 一些额外的支持流程。详情在这里

PostgreSQL 没有内置查询缓存,但有很多开源实用程序可以用于此目的。

于 2012-12-19T13:34:48.543 回答