/**
  * @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;
 }