prooph / pdo-event-store
Prooph PDO EventStore
Requires
- php: ^7.3 | ^8.0
- ext-pdo: *
- prooph/event-store: ^v7.6
Requires (Dev)
- phpspec/prophecy: ^1.9
- phpspec/prophecy-phpunit: ^2.0
- phpunit/php-invoker: ^3.1
- phpunit/phpunit: ^9.3
- prooph/bookdown-template: ^0.2.3
- prooph/php-cs-fixer-config: ^0.4
- psr/container: ^1.0
- sandrokeil/interop-config: ^2.0.1
- satooshi/php-coveralls: ^1.0
Suggests
- ext-pdo_mysql: For usage with MySQL
- ext-pdo_pgsql: For usage with PostgreSQL
- psr/container: ^1.0 for usage of provided factories
- sandrokeil/interop-config: ^2.0.1 for usage of provided factories
Conflicts
- sandrokeil/interop-config: <2.0.1
- v1.15.1
- v1.15.0
- v1.14.2
- v1.14.1
- v1.14.0
- v1.13.0
- v1.12.0
- v1.11.2
- v1.11.1
- v1.11.0
- v1.10.5
- v1.10.4
- v1.10.3
- v1.10.2
- v1.10.1
- v1.10.0
- v1.9.1
- v1.9.0
- v1.9.0-BETA-2
- v1.9.0-BETA-1
- v1.8.4
- v1.8.3
- v1.8.2
- v1.8.1
- v1.8.0
- dev-master / 1.7.x-dev
- v1.7.3
- v1.7.2
- v1.7.1
- v1.7.0
- v1.6.0
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.1
- v1.4.0
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0.0
- v1.0.0-beta4
- v1.0.0-beta3
- v1.0.0-beta2
- v1.0.0-beta1
This package is auto-updated.
Last update: 2024-08-29 04:36:59 UTC
README
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 变得太大时出现错误。
介绍
测试
如果您想在本地上运行单元测试,您需要一个监听在端口 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
支持
- 在带有 #prooph 标签的 Stack Overflow 上提问。
- 在 https://github.com/prooph/event-store/issues 上提交问题。
- 在 prooph gitter 聊天中打招呼。
贡献
请随意分叉并扩展现有插件或添加新插件,并发送带有您更改的 pull request!为了建立一致的代码质量,请为所有更改提供单元测试,并可能更新文档。
许可证
在新BSD许可证下发布。