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

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

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

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


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

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

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

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



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

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

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


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


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


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

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


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


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

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

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

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


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

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

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


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


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


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


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

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

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

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

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

На текущий момент понятно, что Вы защищаетесь от несуществующей проблемы. Защититься от рассинхрона в целом очень просто: достаточно заранее запросить у базы набор идентификаторов и по мере поступления выдавать их объектам. Если это слишком сложно, можно использовать гуиды, тоже ничего страшного. Вот чего точно не стоит делать, так это, собирая велосипед, прикидывать: можно, конечно, поставить коробку передач от "мерседеса", но она ведь не выдержит движения со скоростью свыше 10 км/с, надо что-то получше.
...
Рейтинг: 0 / 0
Вопрос по архитектуре
    #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
Вопрос по архитектуре
    #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
Вопрос по архитектуре
    #40126399
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fkthat, здесь это делается так:

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

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


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