Я использую Кассандру timeuuid в моем проекте. Но невозможно создать timeuuid из-за целочисленных ограничений.
$time = time();
$tS = new Cassandra\Timeuuid($time);
echo("Time Stamp : " . $time . "</br>");
echo("Time UUID : " . $tS . "</br>");
echo("UUID TS : " . $tS->time() . "</br>");
Если я бегу выше кода, я получаю следующий результат.
Time Stamp : 1519110425
Time UUID : 07e0a090-2ba3-11b2-a264-4f5a3b4facaa
UUID TS : 1519110
Это означает, что конструктор Timeuuid ожидает отметку времени в миллисекундах. Но если я попытаюсь передать параметр в миллисекундах, он достигнет целочисленного предела для моего php (32 бита).
$time = time();
$tS = new Cassandra\Timeuuid($time * 1000);
echo("Time Stamp : " . $time . "</br>");
echo("Time UUID : " . $tS . "</br>");
echo("UUID TS : " . $tS->time() . "</br>");
Получение следующей ошибки для вышеуказанного кода.
Fatal error: Uncaught Cassandra\Exception\InvalidArgumentException: Invalid argument - integer or string expected in testFile.php:9 Stack trace: #0 testFile.php(9): Cassandra\Timeuuid->__construct(1519110640000) #1 {main} thrown in testFile.php on line 9
Так как он выше целочисленного предела, он приводится к плавающему значению.
Любая идея, как я могу решить эту проблему?
состояние документации тот Cassandra\Timeuuid
должен получить целое число, которое вы получаете от time
функция. Если посмотреть на исходный код драйвера, то действительно выглядит, что он ожидает значение в секундах, а затем все умножение происходит внутри драйвера C ++.
Для меня это похоже на ошибку в драйвере, поэтому, пожалуйста, подайте вопрос против него в JIRA.
Других решений пока нет …