扩展数据库

如果需要,插件可以为新数据提供持久性。由于Matomo(以前是Piwik)目前将所有数据存储在MySQL数据库中,我们学习了如何在数据库中添加新表,以及如何向现有表添加新数据列。

添加新表

要向Matomo的MySQL数据库添加新表,请执行创建表语句安装方法。例如:

使用Piwik \分贝;使用Piwik \常见;使用\异常;公共类MyPlugin extends \Piwik\Plugin{//…公共函数install() {try {$sql = "CREATE TABLE "。常见的::prefixTable(“mynewtable”)。" (mykey VARCHAR(10) NOT NULL, mydata VARCHAR(100) NOT NULL, PRIMARY KEY (mykey)) DEFAULT CHARSET=utf8 ";Db: exec ($ sql);} catch(异常$e){//忽略错误如果表已经存在(1050代码是'表已经存在')if (!Db::get()->isErrNo($e, '1050')){抛出$e;//… }

卸载插件时删除表

插件也应该通过删除卸载方法:

使用Piwik \分贝;使用Piwik \常见;使用\异常;公共类MyPlugin extends \Piwik\Plugin{//…公共函数卸载(){Db::dropTables(Common::prefixTable('mynewtable'));} //…}

注意:新表应该是适当的前缀

向现有表中添加新列

插件还可以扩充现有的表。例如,如果一个插件想要跟踪额外的访问信息,该插件可以在日志数据表中添加列,并在跟踪期间为这些列设置一个值。这也可以在安装方法:

使用Piwik \分贝;公共类MyPlugin extends \Piwik\Plugin{//…公共函数install() {try {$q1 = "ALTER TABLE ' "。常见的::prefixTable(“log_visit”)。" ' ADD ' mynewdata ' VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER ' config_os ',";Db: exec (q1);} catch(异常$e){//忽略列已经存在错误if (!Db::get()->isErrNo($e, '1060')){抛出$e;//…}

卸载插件时删除列

由于日志表可能有数百万甚至数十亿的条目,当卸载插件时从这些表中删除列将是一个坏主意。插件应删除卸载当表的名称不是以log_ *

定义数据库更新

如果你的插件定义了一个自定义的数据库表或列,模式最终将需要迁移。一个插件可以通过使用控制台生成一个更新文件来定义迁移:

$ ./console generate:update

该命令将询问您的插件名称,然后在插件/编写MyPlugin /更新目录,例如3.0.0-b1.php.更新文件的内容可能是这样的:

类Updates_3_0_0_b1扩展PiwikUpdates {/** * @var MigrationFactory */ private $migration;公共函数__construct(MigrationFactory $factory) {$this->migration = $factory;}公共函数getMigrations(Updater $ Updater){返回数组($ this->migration->db->changeColumnType($table = 'log_visit', $column = 'location_provider', $type = 'VARCHAR(200) NULL'));}公共函数doUpdate(Updater $ Updater) {$ Updater -> executemig(__FILE__, $this->getMigrations($ Updater));}}

数据库迁移工厂($ this - >迁移- > db)为执行数据库迁移提供了许多不同的选择,并为您完成所有复杂的工作。例如,您可以添加列、删除列、更改列、更改键、添加新表,甚至可以在迁移期间执行自定义SQL。有关所有可用迁移的列表,请参阅数据库迁移工厂api参考

如果您想在插件更新时执行与MySQL数据库无关的任何其他操作,您可以在doUpdate方法。

更新现有日志表

本节主要适用于核心开发人员,但您也可以遵循相同的做法。

log_* DB表是Matomo存储被跟踪的每次访问和行动的原始数据的地方。这些表通常会变得非常大,对这些表进行更改(例如添加或删除列或索引)可能需要很长时间。这就是为什么我们只在Matomo主要发行版中更改这些日志表的模式。这适用于Matomo核心和Matomo开发的任何插件,以确保minor和补丁更新在更新时不会造成任何麻烦。

解决方法

如果一个更改非常有用或需要,那么一个变通办法是对Matomo核心或插件的所有新安装进行此更改,并已经为下一个主要版本添加了更新脚本,以便现有用户最终将收到更改。这意味着代码需要检查特定的列/索引是否存在以使用该功能。我们还会发布一个常见问题解答,如何手动进行这些更改,以防有人想要更早地获得这个功能,因为下一个主要版本可能要几年之后。

了解更多

有关Matomo Analytics数据库亚博ap下载结构和表的详细信息,请参见数据库模式引用

Baidu