1. Go to this page and download the library: Download jrsaunders/shard-matrix library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jrsaunders / shard-matrix example snippets
use ShardMatrix\DB\Builder\Schema;
# Creates Table across all appropriate Nodes (Mysql and Postgres simultaneously).
# This follows the guidance you have given in your Yaml Config file as to what tables
# belong on what nodes
Schema::create( 'users',
function ( \Illuminate\Database\Schema\Blueprint $table ) {
$table->string( 'uuid', 50 )->primary();
$table->string('username',255)->unique();
$table->string('email',255)->unique();
$table->integer('something');
$table->dateTime( 'created' );
}
);
use ShardMatrix\DB\Builder\DB;
# Insert Data - the system will choose an appropriate shard node and create a UUID for it that will be attributed to an appropriate node
$uuid = DB::table( 'users' )->insert(
[
'username' => 'jack-malone',
'password' => 'poootpooty',
'created' => (new \DateTime())->format('Y-m-d H:i:s'),
'something' => 5,
'email' => '[email protected]',
]
);
echo $uuid->toString();
# outputs 06a00233-1ea8af83-9b6f-6104-b465-444230303037
echo $uuid->getNode()->getName();
# outputs DB0007
echo $uuid->getTable()->getName();
# outputs users
use ShardMatrix\DB\Builder\DB;
use ShardMatrix\DB\Interfaces\DBDataRowTransactionsInterface;
# Get the record directly from the correct node (shard)
$record = DB::getByUuid( '06a00233-1ea8af83-9b6f-6104-b465-444230303037' );
# Manipulate the record
if ( $record && $record instanceof DBDataRowTransactionsInterface) {
# As above you could run an additional check for the instance of the record returned, but it should always follow this interface through the query builder
echo $record->username;
# outputs jack-malone
echo $record->email;
# outputs [email protected]
# overwrite the email attribute
$record->email = '[email protected]';
# Update the record
$record->save();
}
use ShardMatrix\DB\Builder\DB;
use ShardMatrix\DB\Interfaces\DBDataRowTransactionsInterface;
# Query all relevant nodes for the data
$collection = DB::allNodesTable( 'users')->where('email','like','%yatti%')->limit(50)->get();
# Data returns as a Collection that can be iterated through
$collection->each( function(DBDataRowTransactionsInterface $record){
# Use data conditionally
if($record->username == 'a-bad-user'){
# Manipulate the record and commit changes
$record->delete();
}
});
use ShardMatrix\ShardMatrix;
# Our config file
ShardMatrix::initFromYaml( __DIR__ . '/shard_matrix.yaml' );
# Specifying a local directory to write db data to when it needs to
ShardMatrix::setPdoCachePath( __DIR__ . '/shard_matrix_cache' );
use ShardMatrix\ShardMatrix;
# Our config file
ShardMatrix::initFromYaml( __DIR__ . '/shard_matrix.yaml' );
# Changes the service from PHP forking for asynchronous queries to GoThreaded
ShardMatrix::useGoThreadedForAsyncQueries();
# Uses GoThreaded for asynchronous DB calls when we have to query all relevant shards
ShardMatrix::setGoThreadedService( function () {
return new \ShardMatrix\GoThreaded\Client( '127.0.0.1', 1534, 'gothreaded', 'password' );
} );
# This overwrites the PdoCache Service that was used to write to file, and now instead uses Redis caching
ShardMatrix::setPdoCacheService( function () {
return new \ShardMatrix\PdoCacheRedis( new \Predis\Client( 'tcp://127.0.0.1:6379' ) );
} );
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.