Безболезненный переход на uuid

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
godzie
Сообщения: 60
Зарегистрирован: 2016.04.03, 00:38

Безболезненный переход на uuid

Сообщение godzie » 2016.09.26, 16:59

Нужно перевести idшники в бд на рандом генерацию.
Сначала хотел сделать все на уровне бд, триггером поставить id=uuid_short. В результате в свеж-сохраненную модель не подставляется сгенерированный id, что и понятно.

1. Сделать все на уровне бд - невыйдет?
2. Какая тут бест парктик? декорируем save() у AR?

zelenin
Сообщения: 9939
Зарегистрирован: 2013.04.20, 11:30

Re: Безболезненный переход на uuid

Сообщение zelenin » 2016.09.26, 17:31

генерируете, присваиваете. что еще?

zelenin
Сообщения: 9939
Зарегистрирован: 2013.04.20, 11:30

Re: Безболезненный переход на uuid

Сообщение zelenin » 2016.09.26, 17:34

вообще uuid обычно используют для того, чтобы: а) знать id сразу при создании сущности, б) держать бизнес-логику в приложении, а не где-то еще (поэтому генерить на стороне БД странно)

godzie
Сообщения: 60
Зарегистрирован: 2016.04.03, 00:38

Re: Безболезненный переход на uuid

Сообщение godzie » 2016.09.26, 17:46

вообще uuid обычно используют для того, чтобы: а) знать id сразу при создании сущности, б) держать бизнес-логику в приложении, а не где-то еще
Понял вас, исходя из этого uuid логично генерировать до сохранения сущности непосредственно в бд, так?
(поэтому генерить на стороне БД странно)
выходи что так, просто показалось наиболее быстрым способом, учитывая что кейс заказчика требует использовать uuid просто для рандомизации idшников

zelenin
Сообщения: 9939
Зарегистрирован: 2013.04.20, 11:30

Re: Безболезненный переход на uuid

Сообщение zelenin » 2016.09.26, 17:50

godzie писал(а):Понял вас, исходя из этого uuid логично генерировать до сохранения сущности непосредственно в бд, так?
да

Код: Выделить всё

$model = new Model;
$model->id = (new Uuid4Generator())->generate();
$model->save(); 
соответственно в правилах валидации id должен присутствовать.

Аватара пользователя
S c
Сообщения: 817
Зарегистрирован: 2012.04.11, 14:46

Re: Безболезненный переход на uuid

Сообщение S c » 2017.03.29, 19:00

Вопрос по uuid. При генерации он должен использовать какое-то общее правило? То есть у меня есть сервер (апи), к нему подключены сервисы, все передают uuid (генерируют на стороне клиента). Есть много решений по генерации uuid, какие то сервисы на php, какие то java. Кто то использует uuid3, кто то uuid5. Требования со стороны апи нет, только чтоб это был uuid. Это вообще корректно? или все должны использовать как минимум uuid версию одинаковую (uuid5 к примеру)? Или пофик, использую uuid в любом виде и любой версии - все будет отлично и коллизий не будет?

zelenin
Сообщения: 9939
Зарегистрирован: 2013.04.20, 11:30

Re: Безболезненный переход на uuid

Сообщение zelenin » 2017.03.29, 19:09

S c писал(а):
2017.03.29, 19:00
Вопрос по uuid. При генерации он должен использовать какое-то общее правило?
странно, что сервер не предъявляет требования к варианту.
S c писал(а):
2017.03.29, 19:00
То есть у меня есть сервер (апи), к нему подключены сервисы, все передают uuid (генерируют на стороне клиента). Есть много решений по генерации uuid, какие то сервисы на php, какие то java. Кто то использует uuid3, кто то uuid5.
обычно исполшьзуют uuid4 или comb-вариацию.
S c писал(а):
2017.03.29, 19:00
Требования со стороны апи нет, только чтоб это был uuid. Это вообще корректно? или все должны использовать как минимум uuid версию одинаковую (uuid5 к примеру)? Или пофик, использую uuid в любом виде и любой версии - все будет отлично и коллизий не будет?
думаю, коллизий не будет, но требования было бы неплохо выставить.

Аватара пользователя
S c
Сообщения: 817
Зарегистрирован: 2012.04.11, 14:46

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?

Аватара пользователя
ElisDN
Сообщения: 4459
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Безболезненный переход на uuid

Сообщение ElisDN » 2017.03.30, 04:26

Код: Выделить всё

\Ramsey\Uuid\Uuid::uuid4()->toString()
Не забудьте пройти мастер-класс по Yii2.

zelenin
Сообщения: 9939
Зарегистрирован: 2013.04.20, 11:30

Re: Безболезненный переход на uuid

Сообщение zelenin » 2017.03.30, 04:37

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
        );

zelenin
Сообщения: 9939
Зарегистрирован: 2013.04.20, 11:30

Re: Безболезненный переход на uuid

Сообщение zelenin » 2017.03.30, 04:38

ElisDN писал(а):
2017.03.30, 04:26

Код: Выделить всё

\Ramsey\Uuid\Uuid::uuid4()->toString()
слишком энтерпрайз)

Аватара пользователя
S c
Сообщения: 817
Зарегистрирован: 2012.04.11, 14:46

Re: Безболезненный переход на uuid

Сообщение S c » 2017.04.01, 13:40

:) пожалуй остановлюсь на решении от Ramsey :D

zelenin
Сообщения: 9939
Зарегистрирован: 2013.04.20, 11:30

Re: Безболезненный переход на uuid

Сообщение zelenin » 2017.04.01, 15:31

S c писал(а):
2017.04.01, 13:40
:) пожалуй остановлюсь на решении от Ramsey :D
это крайне оверхедно и тебе не нужно 100 проц.
а внутри итогово там тот же код, только обернутый в кучу адаптеров, фабрик и прочего.

Аватара пользователя
S c
Сообщения: 817
Зарегистрирован: 2012.04.11, 14:46

Re: Безболезненный переход на uuid

Сообщение S c » 2017.04.04, 22:59

zelenin писал(а):
2017.04.01, 15:31
S c писал(а):
2017.04.01, 13:40
:) пожалуй остановлюсь на решении от Ramsey :D
это крайне оверхедно и тебе не нужно 100 проц.
а внутри итогово там тот же код, только обернутый в кучу адаптеров, фабрик и прочего.
окей, спасибо

Ответить