/** * @param int $fromTs * * @return array ['db1' => [uid, uid, 'db2' => [uid, uid]] */ public function generate($fromTs) { $this->deltaList = []; $groupedUidList = []; array_map(function ($shardId) use(&$groupedUidList, $fromTs) { $groupedUidList[$shardId] = $this->onShard($shardId, $fromTs); }, $this->pdoPool->listShardId()); return $groupedUidList; }
/** * @param \Closure $callback * * @return array ['db1' => [uid, uid, 'db2' => [uid, uid]] */ public function generate(\Closure $callback = null) { $groupedUidList = []; $shardIdList = $this->pdoPool->listShardId(); array_map(function ($shardId) use(&$groupedUidList, $callback) { $start = microtime(true); $uidList = $this->onShard($shardId); $groupedUidList[$shardId] = $uidList; if (is_callable($callback)) { $delta = microtime(true) - $start; call_user_func($callback, $shardId, count($uidList), $delta); } }, $shardIdList); return $groupedUidList; }
/** * @param string $date * @param \Closure $callback * * @return array ['db1' => [uid, uid, 'db2' => [uid, uid]] */ public function generate($date, \Closure $callback = null) { if (!(is_string($date) && strlen($date) == strlen('2016-04-04'))) { throw new \InvalidArgumentException('date format should be like 2016-04-04'); } $this->deltaList = []; $groupedUidList = []; array_map(function ($shardId) use(&$groupedUidList, $date, $callback) { $start = microtime(true); $uidList = $this->onShard($shardId, $date); $delta = microtime(true) - $start; $groupedUidList[$shardId] = $uidList; if (is_callable($callback)) { call_user_func($callback, $shardId, count($uidList), $delta); } }, $this->pdoPool->listShardId()); return $groupedUidList; }
/** * @param array $uidList * * @return array */ public function find(array $uidList) { if (count($uidList) > 500) { trigger_error('Max 500 users as input args'); } $userList = []; $shardIdList = $this->pdoPool->listShardId(); foreach ($shardIdList as $shardId) { $pdo = $this->pdoPool->getByShardId($shardId); if ($pdo === false) { continue; } $shardUserList = []; $batchReader = CommonInfoProvider::readUserInfo($pdo, $uidList); foreach ($batchReader as $batchUserList) { $batchDataSet = $this->appendPaymentDigest($batchUserList); foreach ($batchDataSet as $uid => $userInfo) { $shardUserList[$uid] = $userInfo; } } $userList[$shardId] = $shardUserList; } return $userList; }