Безболезненный переход на uuid
Безболезненный переход на uuid
Нужно перевести idшники в бд на рандом генерацию.
Сначала хотел сделать все на уровне бд, триггером поставить id=uuid_short. В результате в свеж-сохраненную модель не подставляется сгенерированный id, что и понятно.
1. Сделать все на уровне бд - невыйдет?
2. Какая тут бест парктик? декорируем save() у AR?
Сначала хотел сделать все на уровне бд, триггером поставить id=uuid_short. В результате в свеж-сохраненную модель не подставляется сгенерированный id, что и понятно.
1. Сделать все на уровне бд - невыйдет?
2. Какая тут бест парктик? декорируем save() у AR?
Re: Безболезненный переход на uuid
генерируете, присваиваете. что еще?
Re: Безболезненный переход на uuid
вообще uuid обычно используют для того, чтобы: а) знать id сразу при создании сущности, б) держать бизнес-логику в приложении, а не где-то еще (поэтому генерить на стороне БД странно)
Re: Безболезненный переход на uuid
Понял вас, исходя из этого uuid логично генерировать до сохранения сущности непосредственно в бд, так?вообще uuid обычно используют для того, чтобы: а) знать id сразу при создании сущности, б) держать бизнес-логику в приложении, а не где-то еще
выходи что так, просто показалось наиболее быстрым способом, учитывая что кейс заказчика требует использовать uuid просто для рандомизации idшников(поэтому генерить на стороне БД странно)
Re: Безболезненный переход на uuid
даgodzie писал(а):Понял вас, исходя из этого uuid логично генерировать до сохранения сущности непосредственно в бд, так?
Код: Выделить всё
$model = new Model;
$model->id = (new Uuid4Generator())->generate();
$model->save();
Re: Безболезненный переход на uuid
Вопрос по uuid. При генерации он должен использовать какое-то общее правило? То есть у меня есть сервер (апи), к нему подключены сервисы, все передают uuid (генерируют на стороне клиента). Есть много решений по генерации uuid, какие то сервисы на php, какие то java. Кто то использует uuid3, кто то uuid5. Требования со стороны апи нет, только чтоб это был uuid. Это вообще корректно? или все должны использовать как минимум uuid версию одинаковую (uuid5 к примеру)? Или пофик, использую uuid в любом виде и любой версии - все будет отлично и коллизий не будет?
Re: Безболезненный переход на uuid
странно, что сервер не предъявляет требования к варианту.
обычно исполшьзуют uuid4 или comb-вариацию.
думаю, коллизий не будет, но требования было бы неплохо выставить.
Re: Безболезненный переход на uuid
Спасибо, сервер не мой, у меня задача реализовать очередной клиент (сервис) к этому апи. Нашел в описание поле ID, уточнил - сказали что это UUID и все. Последний вопрос - что порекомендуете тогда в моем случае? Проект на yii, php7. Нашел на гитхабе много решений типа
https://github.com/p2made/yii2-p2y2-things#uuid-helpers (обертка над https://github.com/ramsey/uuid)
Есть разница что использовать? И что же все таки выбрать из версий - uuid4?
https://github.com/p2made/yii2-p2y2-things#uuid-helpers (обертка над https://github.com/ramsey/uuid)
Есть разница что использовать? И что же все таки выбрать из версий - uuid4?
Re: Безболезненный переход на uuid
Код: Выделить всё
\Ramsey\Uuid\Uuid::uuid4()->toString()
Re: Безболезненный переход на uuid
S c писал(а): ↑2017.03.30, 00:14 Спасибо, сервер не мой, у меня задача реализовать очередной клиент (сервис) к этому апи. Нашел в описание поле ID, уточнил - сказали что это UUID и все. Последний вопрос - что порекомендуете тогда в моем случае? Проект на yii, php7. Нашел на гитхабе много решений типа
https://github.com/p2made/yii2-p2y2-things#uuid-helpers (обертка над https://github.com/ramsey/uuid)
Есть разница что использовать? И что же все таки выбрать из версий - uuid4?
Код: Выделить всё
$bytes = random_bytes(16);
$bytes[6] = chr((ord($bytes[6]) & 0x0f) | 0x40);
$bytes[8] = chr((ord($bytes[8]) & 0x3f) | 0x80);
$hex = bin2hex($bytes);
$fields = [
'time_low' => substr($hex, 0, 8),
'time_mid' => substr($hex, 8, 4),
'time_hi_and_version' => substr($hex, 12, 4),
'clock_seq_hi_and_reserved' => substr($hex, 16, 2),
'clock_seq_low' => substr($hex, 18, 2),
'node' => substr($hex, 20, 12),
];
return vsprintf(
'%08s-%04s-%04s-%02s%02s-%012s',
$fields
);
Re: Безболезненный переход на uuid
слишком энтерпрайз)
Re: Безболезненный переход на uuid
пожалуй остановлюсь на решении от Ramsey