Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CakePHP中管理AWS Aurora主机端点的读写?_Php_Amazon Web Services_Cakephp_Cakephp 3.0_Amazon Aurora - Fatal编程技术网

如何在CakePHP中管理AWS Aurora主机端点的读写?

如何在CakePHP中管理AWS Aurora主机端点的读写?,php,amazon-web-services,cakephp,cakephp-3.0,amazon-aurora,Php,Amazon Web Services,Cakephp,Cakephp 3.0,Amazon Aurora,我正在使用一个基于CakePHP的API,它利用AWS Aurora来管理我们的MySQL数据库。CakePHP应用程序有许多大型的读取查询,需要单独的查询以避免耗尽数据库资源 其工作方式是,当您将CakePHP连接到主机字段时,AWS为您提供单独的端点以在主机字段中使用 我继续按照下面的方式对其进行配置,这是可行的。以下数据源在config/app.php中设置,使用主机值的读卡器和集群(默认)端点: <?php // Other data-source and app setting

我正在使用一个基于CakePHP的API,它利用AWS Aurora来管理我们的MySQL数据库。CakePHP应用程序有许多大型的读取查询,需要单独的查询以避免耗尽数据库资源

其工作方式是,当您将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',
        ],
    ]
];

这个话题偶尔会出现,但结论始终是这不是核心想要支持的东西:

因此,您需要自己解决这个问题,有很多方法可以以更简单的方式解决这个问题,但这在很大程度上取决于应用程序的特定需求。在这方面很难给出任何适当的一般性建议,因为做错事情可能会带来可怕的后果

比如,如果您盲目地将特定连接应用于所有读取操作,那么当您在基于读取数据写入内容的事务中时,应用程序将在另一个连接上发出读取时,您很可能会非常伤心

令人遗憾的是,您可以将模型拆分为读/写模型,沿着CQRS-ish路线,您可以使用为表提供更直观和可重用API的行为,您可以将操作移动到模型层,并以这种方式隐藏可能有点脏的实现,您可以根据请求的端点配置默认连接,例如是读连接还是写连接,等等

有很多方法可以“解决”这个问题,但我恐怕这里的任何人都不能肯定地回答这个问题

<?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']);
    }

}