vkr/view-materializer-bundle

此包已被弃用,不再维护。没有建议的替代包。

一个用于在MySQL中模拟物化视图的包,为Symfony2/3和Doctrine设计

1.0.3 2017-03-23 23:27 UTC

This package is auto-updated.

Last update: 2022-02-01 12:59:56 UTC


README

物化视图是一个不包含任何原始数据的表 - 其数据全部来自对其他表的SELECT查询。与简单视图不同,物化视图作为简单的表存储在磁盘上。在物化视图上的任何查询都比简单视图快得多,但是,物化视图需要定期更新以反映其底层表的变化。一些数据库引擎有默认的视图物化支持,但MySQL没有。

这是一个用于在MySQL中模拟物化视图的简单包。它依赖于Doctrine,既可以作为独立的服务,也可以作为可以通过Cron启动的控制台命令。它还依赖于VKRCustomLoggerBundle。

目前,此包不支持多个数据库连接,将始终使用默认连接。

安装

除了在您的 AppKernel.php 中启用此包外,您还必须对其进行配置并创建一个日志文件。

日志文件需要放置在 /app/logs/ 中,它应该具有 .log 扩展名,当然,它应该是可写的。

要配置此包,请在您的 config.yml 或任何其他包含的配置文件中创建 vkr_view_materializer 键。在此键下,您需要两个键:log_file 包含您的日志文件名(不带路径和扩展名)。views 键包含主要的配置部分,即 - 一个字典,其键对应于物化视图名称,值是创建这些视图的SELECT查询。

YAML示例

vkr_view_materializer:
    log_file: view_materializer
    views:
        first_mview: "SELECT a from table1 WHERE b=c"

使用方法

使用此包有两种方式 - 从控制器或从控制台。

如果您从控制台使用它,请输入 php app/console views:materialize。如果您的配置与上面的示例相同,Doctrine 将尝试执行这些查询

DROP TABLE IF EXISTS first_mview;
CREATE TABLE first_mview AS SELECT a from table1 WHERE b=c;

如果您使用的是Symfony 3,请将 app/console 替换为 bin/console

如果有任何错误,它们将输出到您的日志文件。

从控制器,您需要调用

$materializer = $this->get('vkr_view_materializer.view_materializer');
$isSuccessful = $materializer->materializeViews();

如果有任何错误,将返回 false 并将错误记录到文件中。

API

void ViewMaterializer::__construct(Doctrine\ORM\EntityManager $em, VKR\CustomLoggerBundle\Services\CustomLogger $logger, string[] $definitions, string $logFile)

bool ViewMaterializer::materializeViews()

如果在执行查询时发生错误,则立即停止执行并返回 false。否则返回 true