blockjon/octopus

PHP 的中立数据持久性和弹性 API

dev-master 2014-11-08 22:21 UTC

This package is auto-updated.

Last update: 2024-09-29 03:47:12 UTC


README

主分支: Build Status

Octopus

Octopus 提供了一个类似 ORM 的 API,允许您创建用于读取和写入模型的复杂策略。这种模式有助于您创建一个能够容忍后端数据库故障的系统。

例如,您可以将 Octopus 容易地自定义以在写入时将“用户”模型保存到 MySQL 和 Memcache,但在读取时,首先尝试从 Memcache 读取,然后使用数据库作为后备。

在写入数据时,如果主数据存储失败,Octopus 可以设置断路器到后备策略。例如,如果您的数据库停止响应,Octopus 可以设置将模型写入 Memcache 和队列(稍后当数据库工作时插入)。如果您将读取设置为先观察 Memcache,则您的系统在数据库中断期间仍能运行。

注意:此功能正在偶尔开发中。

Octopus API 简单易用

// Get the dao manager.
$daoManager = new DaoManager;

// Create a new model.
$book = new Book;

// Get the book dao.
$dao = $daoManager->getDao($book);

// Set the properties of your model.
$book->setTitle('A tale of two cities');

// Create a model.
$dao->create($book);

// Load a model.
$book = $dao->read($id);

// Update a model.
$book->setTitle('A Tale of Two Cities');
$dao->update($book);

// Delete a model.
$dao->delete($book);

示例用例

  1. 速度:轻松将所有模型存储在数据库和 Memcache 中

轻松配置 Octopus,以便在数据库和 Memcache 中存储所有模型的副本。然后,您可以配置读取操作首先尝试从 Memcache 中获取数据,然后仅作为后备使用数据库作为数据访问策略。

  1. 健壮性:即使数据库故障,也能保持系统运行

在数据库中断期间,Octopus 可以保持您的系统运行。配置 Octopus 以数据库作为第一个策略(如果失败则使用日志记录策略)和 Memcache 作为第二个策略。在数据库中断期间,模型仍然写入 Memcache 和日志记录变更日志。在读取发生时,数据从 Memcache 提供服务。这掩盖了数据库中断的破坏性影响。稍后,当数据库恢复时,您可以回放日志文件中的变更,从而使数据库达到正确的当前状态。

  1. 轻松在不同数据库之间迁移

对于大多数网站来说,由于代码库与数据库供应商要求的数据访问模式之间的紧密耦合,迁移到不同的数据库(如 MySQL、Postgres、Microsoft SQL Server、MongoDB 等)几乎是不可行的。使用 Octopus,您只需要更改数据访问策略设置以使用新的后端。无需对代码库中的其他部分进行任何额外的代码级别更改。(您仍需要手动在数据库之间进行一次数据迁移)。

当前支持的数据策略

Memcache、APC、PdoSqlite、PdoMysql、Json 日志。

注意:您可以轻松实现自定义策略适配器。随着开发继续,将添加更多适配器到 Octopus。我们希望添加的下一个适配器包括 MongoDb、REST 和 SQS。