Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Вопрос по архитектуре / 25 сообщений из 27, страница 1 из 2
28.12.2021, 20:33
    #40123715
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
Допустим есть некое апи, которое от клиента принимает объект (новая запись ). Класть в базу и получить из неё ид нового объекта долго.
Допустим кладём объект в redis hash. Но как получить его ид, по которому он в базе лежать будет? Первичный ключ.
Можно завести в редисе счетчики на каждую сущность-таблицу. Тогда берём ид первичного ключа в редисе и отдаём клиенту. Вроде все ок. Потом уже добавляем непосредственно в базу.

Но может случиться рассинхрон . Те из редиса получил ид 1234. А по какой то причине он уже есть в базе. Клиент получил новый ид, у него обновилась таблица. И он решил сразу объект удалить. Получится он удалит другой объект.
Или второй вариант ситуации. Клиент получил 1234. И решил отредактировать объект. Сразу. В итоге обновится другой.

В продолжении рассинхрона. Когда реально будет добавляться в базу объект получим нарушение пк. Но тут думаю можно просто дернуть max(pk), добавить объект , обновить его ид в редисе ну и скорректировать счётчик пк по таблице.

Сумбурно слегка, но думаю понятно
...
Рейтинг: 0 / 0
28.12.2021, 20:38
    #40123716
fkfka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
Ну GUID. Его хоть на клиенте еще до отправки генерировать можно, если совсем приспичит.
...
Рейтинг: 0 / 0
28.12.2021, 20:50
    #40123719
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
fkfka
Ну GUID. Его хоть на клиенте еще до отправки генерировать можно, если совсем приспичит.


Хм. Чёт не подумал)
А базе не будет «фиговато» от гуида в качестве первичного ключа?
Пишу не подумав )
...
Рейтинг: 0 / 0
28.12.2021, 22:08
    #40123734
fkfka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
А базе не будет «фиговато» от гуида в качестве первичного ключа?

Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются.
...
Рейтинг: 0 / 0
28.12.2021, 22:13
    #40123737
love_bach
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
если базе "фиговато" уже от единичной вставки, от всяких ухищрений типа "Допустим кладём объект в redis" лучше ей не станет
...
Рейтинг: 0 / 0
28.12.2021, 22:23
    #40123739
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL,

авторКласть в базу и получить из неё ид нового объекта долго.кто тебе сказал, что долго?
а твои манипуляции не долго? при нынешних ssd грешно про долго говорить.
...
Рейтинг: 0 / 0
28.12.2021, 23:30
    #40123747
fkfka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
вадя
кто тебе сказал, что долго?

Может там на поклажу стопятьсот триггеров навешано.
...
Рейтинг: 0 / 0
28.12.2021, 23:40
    #40123748
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
love_bach
если базе "фиговато" уже от единичной вставки, от всяких ухищрений типа "Допустим кладём объект в redis" лучше ей не станет



Не соглашусь. Тестировал и прямо в базу вставлять и сначала в редис . Разница ответа сервера практически на порядок. По крайней мере с выборкой и кэшем в виде редиса. Запрос к базе простецкий. Возвращает ее более 100 строк.
...
Рейтинг: 0 / 0
29.12.2021, 00:25
    #40123757
fkfka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
По крайней мере с выборкой и кэшем в виде редиса.

Еще бы.
...
Рейтинг: 0 / 0
29.12.2021, 06:06
    #40123780
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
fkfka
AndrewVL
А базе не будет «фиговато» от гуида в качестве первичного ключа?

Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются.


Не может. У гуидов ток одна проблема. Страшно выглядят :)
В остальном гуиды маст хев.
...
Рейтинг: 0 / 0
29.12.2021, 18:54
    #40124043
love_bach
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
Не соглашусь. Тестировал и прямо в базу вставлять и сначала в редис


ну понятно в редис быстрее. а потом что с базой то делать?
так то вообще быстрее не сохранять
...
Рейтинг: 0 / 0
29.12.2021, 18:57
    #40124044
love_bach
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
Запрос к базе простецкий. Возвращает ее более 100 строк.


не понимаю проблему
...
Рейтинг: 0 / 0
30.12.2021, 12:45
    #40124147
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
hVostt
fkfka
пропущено...

Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются.


Не может. У гуидов ток одна проблема. Страшно выглядят :)
В остальном гуиды маст хев.


те гуид в виде ПК в таблице? и отдавать клиенту набор данных с ключами не 1,2,3 , а страшные длинные строки?)

с гуидом, ну или с глобальным счетчиком на все таблицы в редисе только одна проблема - руками в базу не добавишь ничего. с гуидом еще можно. а со счетчиком в редисе уже нет - рассинхрон
...
Рейтинг: 0 / 0
30.12.2021, 14:23
    #40124171
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
и отдавать клиенту набор данных с ключами не 1,2,3 , а страшные длинные строки?)

Целое число - 8 байт. GUID - 16 байт. "Страшные длинные строки" только в голове у не совсем компетентных людей.
...
Рейтинг: 0 / 0
30.12.2021, 15:09
    #40124179
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
Dimitry Sibiryakov,

16 байт? недавно встретил реализацию, где guid хранился как текст, да еще и в юникоде )
...
Рейтинг: 0 / 0
31.12.2021, 15:04
    #40124322
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
Я и говорю - у не совсем компетентных людей .
...
Рейтинг: 0 / 0
31.12.2021, 15:17
    #40124323
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
Dimitry Sibiryakov
Я и говорю - у не совсем компетентных людей .


у всех компетенции разные

Что посоветует компетентный человек?
Если совсем по простому. есть счет. приходит с клиента его шапка вместе с двумя строками тела. Идентифицировать что это один объект не проблема )
guid как то сомнительно , даже если хранить его в FB как CHAR(16) CHARACTER SET OCTETS
Да и конвертировать его придется постоянно отдавая клиенту.
Да и все ж базе оперировать в индексах с int или guid тоже разница есть, плюс в наличии еще помимо ПК еще и ФК.

почитал как делаю всякие фэйсбуки и тд.
получается так. при получении новых записей с клиента дергают какой то сервис , который отдает уникальный ИД в пределах всей базы. ну тот же редис со счетчиком. ну и далее уже после ответа клиенту добавляют в медленную базу.
...
Рейтинг: 0 / 0
01.01.2022, 07:51
    #40124375
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
те гуид в виде ПК в таблице? и отдавать клиенту набор данных с ключами не 1,2,3 , а страшные длинные строки?)


Страшные длинные строки это только на экране.
При хранении это 128 бит, что всего в 4 раза больше int, т.е. париться на тему, что это типа много-долго-дорого -- просто смешно. Это ничто.


AndrewVL
с гуидом, ну или с глобальным счетчиком на все таблицы в редисе только одна проблема - руками в базу не добавишь ничего. с гуидом еще можно. а со счетчиком в редисе уже нет - рассинхрон


Ну так в чём проблема-то? )
...
Рейтинг: 0 / 0
01.01.2022, 07:55
    #40124376
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
почитал как делаю всякие фэйсбуки и тд.
получается так. при получении новых записей с клиента дергают какой то сервис , который отдает уникальный ИД в пределах всей базы. ну тот же редис со счетчиком. ну и далее уже после ответа клиенту добавляют в медленную базу.


Ну еси вы такое где-то там прочитали на заборе, ну так оно конечно же чистая правда :)
В общем, непонятно чего вы хотите, решение вроде подсказали.

Какие-то счётчики, медленные базы, редис с нецелевым использованием... ну хочется страдать, зачем мы будем мешать? )
...
Рейтинг: 0 / 0
01.01.2022, 14:48
    #40124390
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
Да и конвертировать его придется постоянно отдавая клиенту.

Зачем? Не надо его конвертировать, отдавай как есть.

AndrewVL
Да и все ж базе оперировать в индексах с int или guid тоже разница есть

Нет.
...
Рейтинг: 0 / 0
02.01.2022, 11:06
    #40124452
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
AndrewVL
Сумбурно слегка, но думаю понятно

На текущий момент понятно, что Вы защищаетесь от несуществующей проблемы. Защититься от рассинхрона в целом очень просто: достаточно заранее запросить у базы набор идентификаторов и по мере поступления выдавать их объектам. Если это слишком сложно, можно использовать гуиды, тоже ничего страшного. Вот чего точно не стоит делать, так это, собирая велосипед, прикидывать: можно, конечно, поставить коробку передач от "мерседеса", но она ведь не выдержит движения со скоростью свыше 10 км/с, надо что-то получше.
...
Рейтинг: 0 / 0
10.01.2022, 23:58
    #40125634
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
hVostt
fkfka
пропущено...

Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются.


Не может. У гуидов ток одна проблема. Страшно выглядят :)
В остальном гуиды маст хев.

Можешь попробовать сравнить ради прикола:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table foo (
    id uniqueidentifier not null primary key,
    num binary(1000) not null
)

;with t (id, num) as (
    select newid(), 0
    union all
    select newid(), num + 1 from t where num < 1000000
)
insert foo(id, num) select id, crypt_gen_random(1000) from t
option (maxrecursion 0)


и
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table foo (
    id uniqueidentifier not null primary key nonclustered,
    num binary(1000) not null
)

;with t (id, num) as (
    select newid(), 0
    union all
    select newid(), num + 1 from t where num < 1000000
)
insert foo(id, num) select id, crypt_gen_random(1000) from t
option (maxrecursion 0)


Как бы сразу поймешь в чем дело (т.е. совсем не в длине и не в чтении) :)
...
Рейтинг: 0 / 0
13.01.2022, 17:48
    #40126383
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
fkthat, здесь это делается так:

Код: sql
1.
2.
3.
4.
create table foo (
    id uniqueidentifier not null primary key nonclustered,
    num binary(1000) not null
)
...
Рейтинг: 0 / 0
13.01.2022, 20:06
    #40126399
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
softwarer
fkthat, здесь это делается так:

Ты меня хоть до конца читал?
...
Рейтинг: 0 / 0
13.01.2022, 20:13
    #40126403
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре
fkthat,

не за что.
...
Рейтинг: 0 / 0
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Вопрос по архитектуре / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]