Wallogit.com
2017 © Pedro Peláez
Doctrine Extension to support horizontal sharding in the Doctrine ORM., (*1)
Implement sharding inside Doctrine at a level that is as unobtrusive to the developer as possible., (*2)
Problems to tackle:, (*3)
Version 1: DBAL 2.3 (Multi-Tenant Apps), (*4)
1. ID Generation support (in DBAL + ORM done) 2. Multi-Tenant Support: Either pick a global metadata database or exactly one shard. 3. Fan-out queries over all shards (or a subset) by result appending
Version 2: ORM related (complex):, (*5)
4. ID resolving (Pick shard for a new ID) 5. Query resolving (Pick shards a query should send to) 6. Shard resolving (Pick shards an ID could be on) 7. Transactions 8. Read Only objects
Sharded tables require the sharding-distribution key as one of their columns. This will affect your code compared to a normalized db-schema. If you have a Blog BlogPost PostComments entity setup sharded by blog_id then even the PostComment table needs this column, even if an "unsharded", normalized DB-Schema does not need this information., (*6)
Assumptions:, (*7)
SQL Azure is a special case, points 1, 2, 3, 4, 7 and 8 are partly handled on the database level. This makes it a perfect test-implementation for just the subset of features in points 5-6. However there need to be a way to configure SchemaTool to generate the correct Schema on SQL Azure., (*8)
More features are necessary to implement sharding on the PHP level, independent from database support:, (*9)
These are easier to support as you have some value to determine the shard id for the whole request very early on. Here also queries can always be limited to a single shard., (*10)
This strategy requires access to multiple shards in a single request based on the data accessed., (*11)