Страница 1 из 1

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

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

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

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

Добавлено: 2016.09.26, 17:31
zelenin
генерируете, присваиваете. что еще?

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 2017.03.29, 19:09
zelenin
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 в любом виде и любой версии - все будет отлично и коллизий не будет?
думаю, коллизий не будет, но требования было бы неплохо выставить.

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

Добавлено: 2017.03.30, 00:14
S c
Спасибо, сервер не мой, у меня задача реализовать очередной клиент (сервис) к этому апи. Нашел в описание поле ID, уточнил - сказали что это UUID и все. Последний вопрос - что порекомендуете тогда в моем случае? Проект на yii, php7. Нашел на гитхабе много решений типа
https://github.com/p2made/yii2-p2y2-things#uuid-helpers (обертка над https://github.com/ramsey/uuid)
Есть разница что использовать? И что же все таки выбрать из версий - uuid4?

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

Добавлено: 2017.03.30, 04:26
ElisDN

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

\Ramsey\Uuid\Uuid::uuid4()->toString()

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

Добавлено: 2017.03.30, 04:37
zelenin
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

Добавлено: 2017.03.30, 04:38
zelenin
ElisDN писал(а): 2017.03.30, 04:26

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

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

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

Добавлено: 2017.04.01, 13:40
S c
:) пожалуй остановлюсь на решении от Ramsey :D

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

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

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

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