vkr / view-materializer-bundle
一个用于在MySQL中模拟物化视图的包,为Symfony2/3和Doctrine设计
Requires
- php: >=5.6
- doctrine/doctrine-bundle: ~1.4
- doctrine/orm: >=2.2.3
- symfony/symfony: ~2.8|~3.0
- vkr/custom-logger-bundle: ~1.2
Requires (Dev)
- phpunit/phpunit: >=5.4
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
。