1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
<?php
require 'vendor/autoload.php';
use Amp\Parallel\Worker;
use Amp\Parallel\Context;
// Fonction pour exécuter une requête SQL dans un contexte parallèle
function executeQueryInParallel($dsn, $query) {
return Worker\enqueueCallable(static function () use ($dsn, $query) {
$connection = odbc_connect($dsn, 'IUD', 'Pwd');
if (!$connection) {
throw new \RuntimeException("Failed to connect to database.");
}
$result = odbc_exec($connection, $query);
if (!$result) {
throw new \RuntimeException("Query execution failed.");
}
$data = [];
while ($row = odbc_fetch_array($result)) {
$data[] = $row;
}
odbc_free_result($result);
odbc_close($connection);
return $data;
});
}
// Fonction principale pour effectuer des lectures parallèles sur la base de données
function parallelDatabaseReads($queries) {
$dsn = 'MADSN';
$promises = [];
foreach ($queries as $query) {
$promises[] = executeQueryInParallel($dsn, $query);
}
$results = Amp\Promise\wait(Amp\Promise\all($promises));
return $results;
}
// Exemple d'utilisation
$queries = [
"SELECT * FROM table1 WHERE condition1",
"SELECT * FROM table2 WHERE condition2",
];
$results = parallelDatabaseReads($queries);
foreach ($results as $result) {
var_dump($result);
} |
Partager