prooph/pdo-event-store

Prooph PDO EventStore

v1.15.1 2022-11-29 16:56 UTC

README

Build Status Coverage Status Gitter

Prooph EventStore 的 PDO 实现用于 Prooph EventStore

需求

  • PHP >= 7.3
  • PDO_MySQL 扩展或 PDO_PGSQL 扩展

对于 MariaDB,您需要服务器版本 >= 10.2.11。
性能影响:请参阅 [MariaDB 索引和效率](docs/variants.md#MariaDB Indexes and Efficiency)

对于 MySQL,您需要服务器版本 >= 5.7.9。

对于 Postgres,您需要服务器版本 >= 9.4。

注意:由于 v1.6.0 中 MariaDB 服务器的一个 bug 修复,MariaDB 至少需要版本 10.2.11,请参阅 https://jira.mariadb.org/browse/MDEV-14402

设置

对于 MariaDB,在您的服务器上运行 scripts/mariadb/01_event_streams_table.sql 脚本。

对于 MySQL,在您的服务器上运行 scripts/mysql/01_event_streams_table.sql 脚本。

对于 Postgres,在您的服务器上运行 scripts/postgres/01_event_streams_table.sql 脚本。

这将设置所需的事件流表。

如果您想使用投影,还需要在您的服务器上运行脚本 scripts/mariadb/02_projections_table.sql(适用于 MariaDB)、scripts/mysql/02_projections_table.sql(适用于 MySQL)或 scripts/postgres/02_projections_table.sql(适用于 Postgres)。

从 1.6 升级到 1.7

从 v1.7 开始,pdo-event-store 使用优化后的表模式。可以通过脚本在后台优化此过程,因此不需要数据库停机时间。要升级现有数据库,您必须执行以下操作

  • MariaDB
ALTER TABLE `event_streams` MODIFY `metadata` LONGTEXT NOT NULL;
ALTER TABLE `projections` MODIFY `position` LONGTEXT;
ALTER TABLE `projections` MODIFY `state` LONGTEXT;

然后对所有事件流(SELECT stream_name FROM event_streams

ALTER TABLE <stream_name> MODIFY `payload` LONGTEXT NOT NULL;
ALTER TABLE <stream_name> MODIFY `metadata` LONGTEXT NOT NULL,
  • MySQL

无需升级

  • Postgres

对所有事件流(SELECT stream_name FROM event_streams

ALTER TABLE <stream_name> MODIFY event_id UUID NOT NULL;

额外说明

当使用 Postgres 时,event_id 必须是有效的 uuid,因此在使用自定义 MetadataMatcher 时请小心,因为当传递非有效 uuid(例如 "foo")作为 uuid 时,事件存储可能会抛出异常。

强烈建议进行迁移,但不是必需的。它是完全向后兼容的。Postgres 的更改仅是一个微优化,MariaDB 的更改可以防止存储的 json 变得太大时出现错误。

介绍

Prooph Event Store v7

测试

如果您想在本地上运行单元测试,您需要一个监听在端口 3306 的运行中的 MySql 服务器和一个监听在端口 5432 的运行中的 Postgres 服务器。这两个都应该包含一个空的数据库 event_store_tests

使用 Composer 运行测试

MariaDb

$ vendor/bin/phpunit -c phpunit.xml.mariadb

MySql

$ vendor/bin/phpunit -c phpunit.xml.mysql

Postgres

$ vendor/bin/phpunit -c phpunit.xml.postgres

使用 Docker Compose 运行测试

MariaDb

docker-compose -f docker-compose-tests.yml run composer run-script test-mariadb --timeout 0; \
docker-compose -f docker-compose-tests.yml stop

MySql

docker-compose -f docker-compose-tests.yml run composer run-script test-mysql --timeout 0; \
docker-compose -f docker-compose-tests.yml stop

Postgres

docker-compose -f docker-compose-tests.yml run composer run-script test-postgres --timeout 0; \
docker-compose -f docker-compose-tests.yml stop

支持

贡献

请随意分叉并扩展现有插件或添加新插件,并发送带有您更改的 pull request!为了建立一致的代码质量,请为所有更改提供单元测试,并可能更新文档。

许可证

新BSD许可证下发布。