【发布时间】:2021-08-22 01:14:23
【问题描述】:
我正在使用基于 CakePHP 的 API,它利用 AWS Aurora 来管理我们的 MySQL 数据库。 CakePHP 应用程序有许多大型读取查询,需要单独的Reader Endpoint 才能不耗尽数据库资源。
其工作方式是,当您将 CakePHP 连接到它时,AWS 为您提供了在主机字段中使用的单独端点。
我继续按照以下方式对其进行了配置,这很有效。以下数据源在 config/app.php 中设置,使用读取器和集群(默认)端点作为主机值:
<?php
// Other data-source and app settings are omitted, to keep things simple
return [
'Datasources' => [
'default' => [
'host' => 'mydbcluster.cluster-123456789012.us-east-1.rds.amazonaws.com',
],
'read' => [
'host' => 'mydbcluster.cluster-ro-123456789012.us-east-1.rds.amazonaws.com',
],
]
];
'read' 和 'default' 数据源都指向同一个数据库,但是这个额外的数据源纯粹配置为支持只读主机值。
此时,我所要做的就是覆盖默认连接以读取需要读取连接的查询:
<?php
/**
* Class TaskNotesController
*
* @property \App\Model\Table\TaskNotesTable $TaskNotes
*/
class TaskNotesController extends \Cake\Controller\Controller
{
public function index(): void
{
$taskNotes = $this->TaskNotes
->setConnection(\Cake\Datasource\ConnectionManager::get('read'))
->find('all')
->where(['foo' => 'bar']);
}
}
但是,我想将读取端点应用于应用程序中的所有读取查询。似乎 Cake 会有一种更简洁的方式来执行此操作,以避免在每个查询上附加 setConnection() 调用。
您能告诉我在 CakePHP 中是否有更简化的方式来执行此操作?
提前致谢!
【问题讨论】:
标签: php amazon-web-services cakephp cakephp-3.0 amazon-aurora