interface ShardManager (View source)

Sharding Manager gives access to APIs to implementing sharding on top of Doctrine\DBAL\Connection instances.

For simplicity and developer ease-of-use (and understanding) the sharding API only covers single shard queries, no fan-out support. It is primarily suited for multi-tenant applications.

The assumption about sharding here is that a distribution value can be found that gives access to all the necessary data for all use-cases. Switching between shards should be done with caution, especially if lazy loading is implemented. Any query is always executed against the last shard that was selected. If a query is created for a shard Y but then a shard X is selected when its actually excecuted you will hit the wrong shard.

Methods

void
selectGlobal()

Select global database with global data.

void
selectShard($distributionValue)

SELECT queries after this statement will be issued against the selected shard.

string
getCurrentDistributionValue()

Get the distribution value currently used for sharding.

array
getShards()

Get information about the amount of shards and other details.

array
queryAll(string $sql, array $params, array $types)

Query all shards in undefined order and return the results appended to each other. Restore the previous distribution value after execution.

Details

void selectGlobal()

Select global database with global data.

This is the default database that is connected when no shard is selected.

Return Value

void

void selectShard($distributionValue)

SELECT queries after this statement will be issued against the selected shard.

Parameters

$distributionValue

Return Value

void

Exceptions

ShardingException If no value is passed as shard identifier.

string getCurrentDistributionValue()

Get the distribution value currently used for sharding.

Return Value

string

array getShards()

Get information about the amount of shards and other details.

Format is implementation specific, each shard is one element and has a 'name' attribute at least.

Return Value

array

array queryAll(string $sql, array $params, array $types)

Query all shards in undefined order and return the results appended to each other. Restore the previous distribution value after execution.

Using {@link Connection::fetchAll} to retrieve rows internally.

Parameters

string $sql
array $params
array $types

Return Value

array