【问题标题】:How do I manage read and write AWS Aurora host endpoints in CakePHP?如何在 CakePHP 中管理读写 AWS Aurora 主机端点?
【发布时间】: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


    【解决方案1】:

    这个话题每隔一段时间就会出现一次,但结论始终是这不是核心想要支持的东西:https://github.com/cakephp/cakephp/issues/9197

    因此,您在这里只能靠自己,并且有很多方法可以以更干燥的方式解决这个问题,但这在很大程度上取决于您的应用程序的特定需求。很难就此给出任何适当的通用建议,因为做错事可能会产生可怕的后果。

    如果您盲目地将特定连接应用于所有读取操作,那么当您的应用程序在不同的连接上发出读取时,您很可能会感到非常难过,而您处于基于写入的事务中读取数据。

    所有这些都令人难过,您可以将模型拆分为读/写模型,沿着 CQRS-ish 路线走,您可以使用为您的表提供更直接和可重用 API 的行为,您可以将操作移至模型层并隐藏可能有点脏的实现,您可以根据请求的端点配置默认连接,例如它是读取还是写入等。

    有很多方法可以“解决”这个问题,但恐怕这里的任何人都无法明确回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2023-01-24
      • 1970-01-01
      • 2019-06-20
      • 2015-08-14
      • 2018-10-19
      相关资源
      最近更新 更多