/** * @param int $prefixLength */ public static function buildRanges($prefixLength) { $db = BucketRange::conn(); if ((new BucketRange())->tableExists()) { $db->query(ParseQuery::parse($db, 'DELETE FROM %T', BucketRange::tableName())); } $maxNum = pow(16, $prefixLength); for ($i = 0; $i < $maxNum; $i++) { $prefix = sprintf("%0" . $prefixLength . "x", $i); $range = new BucketRange($prefix); $range->processed = 0; $range->processing = 0; $range->randomKey = rand(1, 10000); $range->saveChanges(); Shell::clearLine(); echo "Building ranges: " . number_format($i + 1) . "/" . number_format($maxNum); } echo "\n"; }
private function _countRange($startKey, $endKey) { if ($startKey == "" && $endKey == "") { echo "Start key and end key are both blank\n"; die; } $cass = Cassandra::getAccessor($this->_getCassServiceName()); $cf = $cass->cf($this->_getColumnFamilyName(), false); echo "Counting range from '" . $startKey . "' to '" . $endKey . "'\n"; $batchSize = 1000; $totalKeys = 1; $finished = false; $lastKey = $startKey; while (!$finished) { // ignore the duplicate key from each time around $totalKeys--; $items = $cf->getKeys($lastKey, $endKey, $batchSize, array()); $cnt = count($items); $totalKeys += $cnt; $lastKey = last_key($items); if ($cnt < $batchSize || $lastKey == $endKey) { $finished = true; } Shell::clearLine(); echo "Found " . number_format($totalKeys) . " keys"; } echo "\n"; }
/** * For testing only: refresh the keys for all ranges */ public function refreshKeysForAllRanges() { $result = $this->_multiGetRows(TokenRange::conn(), 'SELECT id FROM %T', $this->listAllRangeTables()); $ids = []; foreach ($result as $row) { $ids[] = $row->id; } $total = count($ids); $processed = 0; foreach ($ids as $id) { $range = new TokenRange($id); $this->refreshKeysForRange($range); $processed++; Shell::clearLine(); echo "Processed: " . number_format($processed) . ' / ' . number_format($total); } echo "\n"; }