Db.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace controllers;
  3. use Ubiquity\orm\SDAO;
  4. use models\World;
  5. /**
  6. * Bench controller.
  7. */
  8. class Db extends \Ubiquity\controllers\Controller {
  9. public function __construct() {}
  10. public function initialize() {
  11. \header('Content-Type: application/json');
  12. \Ubiquity\cache\CacheManager::startProdFromCtrl();
  13. }
  14. public function index() {
  15. echo \json_encode((SDAO::getById(World::class, [
  16. 'id' => \mt_rand(1, 10000)
  17. ], false))->_rest);
  18. }
  19. public function query($queries = 1) {
  20. $worlds = [];
  21. $count = \min(\max((int) $queries, 1), 500);
  22. for ($i = 0; $i < $count; ++ $i) {
  23. $worlds[] = (SDAO::getById(World::class, [
  24. 'id' => \mt_rand(1, 10000)
  25. ], false))->_rest;
  26. }
  27. echo \json_encode($worlds);
  28. }
  29. public function update($queries = 1) {
  30. $worlds = [];
  31. $count = \min(\max((int) $queries, 1), 500);
  32. $ids = $this->getUniqueRandomNumbers($count);
  33. foreach ($ids as $id) {
  34. $world = SDAO::getById(World::class, [
  35. 'id' => $id
  36. ], false);
  37. $world->randomNumber = \mt_rand(1, 10000);
  38. SDAO::toUpdate($world);
  39. $worlds[] = $world->_rest;
  40. }
  41. SDAO::updateGroups($count);
  42. echo \json_encode($worlds);
  43. }
  44. private function getUniqueRandomNumbers($count) {
  45. $res = [];
  46. do {
  47. $res[\mt_rand(1, 10000)] = 1;
  48. } while (\count($res) < $count);
  49. \ksort($res); // prevent deadlocks (see https://github.com/TechEmpower/FrameworkBenchmarks/pull/5230#discussion_r345780701)
  50. return \array_keys($res);
  51. }
  52. }