With sharding all the ids have to be generated for global uniqueness. There are three strategies for this.
With sharding all the ids have to be generated for global uniqueness. There are three strategies for this.
1. Use GUIDs as described here http://blogs.msdn.com/b/cbiyikoglu/archive/2011/06/20/id-generation-in-federations-identity-sequences-and-guids-uniqueidentifier.aspx
1. Use GUIDs as described here http://blogs.msdn.com/b/cbiyikoglu/archive/2011/06/20/id-generation-in-federations-identity-sequences-and-guids-uniqueidentifier.aspx
2. Having a central table that is accessed with a second connection to generate sequential ids
2. Having a central table that is accessed with a second connection to generate sequential ids
3. Using natural keys from the domain.
3. Using natural keys from the domain.
The second approach has the benefit of having numerical primary keys, however also a central failure location. The third strategy can seldom be used, because the domains don't allow this. Identity columns cannot be used at all.
The second approach has the benefit of having numerical primary keys, however also a central failure location. The third strategy can seldom be used, because the domains don't allow this. Identity columns cannot be used at all.
@@@ php
@@@ php
<?php
<?php
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Id\TableHiLoIdGenerator;
use Doctrine\DBAL\Id\TableHiLoIdGenerator;
$dbParams = array(
$dbParams = array(
'dbname' => 'dbname.database.windows.net',
'dbname' => 'dbname.database.windows.net',
// ...
// ...
);
);
$conn = DriverManager::getConnection($dbParams);
$conn = DriverManager::getConnection($dbParams);
$idGenerator = new TableHiLoIdGenerator($conn, 'id_table_name', $multiplicator = 1);
$idGenerator = new TableHiLoIdGenerator($conn, 'id_table_name', $multiplicator = 1);