我知道这是非常广泛的,所以让我给你设置并具体说明我的重点。
环境:
我正在使用 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 许可证时)
我想这已经有很多要回答的了,所以我会在这里停下来。如果有赞美的链接,我不介意简单/不完整的答案。
如果您需要更多信息,请告诉我
在此先感谢各位,感谢您的帮助。