Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/prooph/pdo-event-store
PDO implementation of ProophEventStore http://getprooph.org
https://github.com/prooph/pdo-event-store
cqrs ddd event-sourcing event-store mysql php postgres
Last synced: 1 day ago
JSON representation
PDO implementation of ProophEventStore http://getprooph.org
- Host: GitHub
- URL: https://github.com/prooph/pdo-event-store
- Owner: prooph
- License: bsd-3-clause
- Created: 2016-11-03T12:58:43.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-02-27T12:27:32.000Z (9 months ago)
- Last Synced: 2024-10-18T14:15:30.796Z (27 days ago)
- Topics: cqrs, ddd, event-sourcing, event-store, mysql, php, postgres
- Language: PHP
- Homepage:
- Size: 1.72 MB
- Stars: 110
- Watchers: 13
- Forks: 56
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# pdo-event-store
[![Build Status](https://travis-ci.com/prooph/pdo-event-store.svg?branch=master)](https://travis-ci.com/prooph/pdo-event-store)
[![Coverage Status](https://coveralls.io/repos/prooph/pdo-event-store/badge.svg?branch=master&service=github)](https://coveralls.io/github/prooph/pdo-event-store?branch=master)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/prooph/improoph)PDO EventStore implementation for [Prooph EventStore](https://github.com/prooph/event-store)
Requirements
------------- PHP >= 7.3
- PDO_MySQL Extension or PDO_PGSQL ExtensionFor MariaDB you need server version >= 10.2.11.
**Performance Impact**: see [MariaDB Indexes and Efficiency](docs/variants.md#MariaDB Indexes and Efficiency)For MySQL you need server version >= 5.7.9.
For Postgres you need server version >= 9.4.
Attention: Since v1.6.0 MariaDB Server has to be at least 10.2.11 due to a bugfix in MariaDB, see https://jira.mariadb.org/browse/MDEV-14402.
Setup
-----For MariaDB run the script in `scripts/mariadb/01_event_streams_table.sql` on your server.
For MySQL run the script in `scripts/mysql/01_event_streams_table.sql` on your server.
For Postgres run the script in `scripts/postgres/01_event_streams_table.sql` on your server.
This will setup the required event streams table.
If you want to use the projections, run additionally the scripts `scripts/mariadb/02_projections_table.sql`
(for MariaDB), `scripts/mysql/02_projections_table.sql` (for MySQL) or
`scripts/postgres/02_projections_table.sql` (for Postgres) on your server.Upgrade from 1.6 to 1.7
-----------------------Starting from v1.7 the pdo-event-store uses optimized table schemas.
The upgrade can be done in background with a script optimizing that process.
A downtime for the database should not be needed.
In order to upgrade your existing database, you have to execute:- MariaDB
```
ALTER TABLE `event_streams` MODIFY `metadata` LONGTEXT NOT NULL;
ALTER TABLE `projections` MODIFY `position` LONGTEXT;
ALTER TABLE `projections` MODIFY `state` LONGTEXT;
```Then for all event-streams (`SELECT stream_name FROM event_streams`)
```
ALTER TABLE MODIFY `payload` LONGTEXT NOT NULL;
ALTER TABLE MODIFY `metadata` LONGTEXT NOT NULL,
```- MySQL
nothing to upgrade
- Postgres
For all event-streams (`SELECT stream_name FROM event_streams`)
```
ALTER TABLE MODIFY event_id UUID NOT NULL;
```Additional note:
When using Postgres, the event_id has to be a valid uuid, so be careful when using a custom MetadataMatcher, as the
event-store could throw an exception when passing a non-valid uuid (f.e. "foo") as uuid.The migration is strongly recommended, but not required. It's fully backward-compatible. The change on Postgres is
only a microoptimization, the change on MariaDB prevents errors, when the stored json gets too big.Introduction
------------[![Prooph Event Store v7](https://img.youtube.com/vi/QhpDIqYQzg0/0.jpg)](https://www.youtube.com/watch?v=QhpDIqYQzg0)
Tests
-----
If you want to run the unit tests locally you need a runnging MySql server listening on port `3306`
and a running Postgres server listening on port `5432`. Both should contain an empty database `event_store_tests`.## Run Tests With 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`
## Run Tests With Docker Compose
### MariaDb
```bash
docker-compose -f docker-compose-tests.yml run composer run-script test-mariadb --timeout 0; \
docker-compose -f docker-compose-tests.yml stop
```### MySql
```bash
docker-compose -f docker-compose-tests.yml run composer run-script test-mysql --timeout 0; \
docker-compose -f docker-compose-tests.yml stop
```### Postgres
```bash
docker-compose -f docker-compose-tests.yml run composer run-script test-postgres --timeout 0; \
docker-compose -f docker-compose-tests.yml stop
```## Support
- Ask questions on Stack Overflow tagged with [#prooph](https://stackoverflow.com/questions/tagged/prooph).
- File issues at [https://github.com/prooph/event-store/issues](https://github.com/prooph/event-store/issues).
- Say hello in the [prooph gitter](https://gitter.im/prooph/improoph) chat.## Contribute
Please feel free to fork and extend existing or add new plugins and send a pull request with your changes!
To establish a consistent code quality, please provide unit tests for all your changes and may adapt the documentation.## License
Released under the [New BSD License](LICENSE).