|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
Допустим есть некое апи, которое от клиента принимает объект (новая запись ). Класть в базу и получить из неё ид нового объекта долго. Допустим кладём объект в redis hash. Но как получить его ид, по которому он в базе лежать будет? Первичный ключ. Можно завести в редисе счетчики на каждую сущность-таблицу. Тогда берём ид первичного ключа в редисе и отдаём клиенту. Вроде все ок. Потом уже добавляем непосредственно в базу. Но может случиться рассинхрон . Те из редиса получил ид 1234. А по какой то причине он уже есть в базе. Клиент получил новый ид, у него обновилась таблица. И он решил сразу объект удалить. Получится он удалит другой объект. Или второй вариант ситуации. Клиент получил 1234. И решил отредактировать объект. Сразу. В итоге обновится другой. В продолжении рассинхрона. Когда реально будет добавляться в базу объект получим нарушение пк. Но тут думаю можно просто дернуть max(pk), добавить объект , обновить его ид в редисе ну и скорректировать счётчик пк по таблице. Сумбурно слегка, но думаю понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 20:33 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
Ну GUID. Его хоть на клиенте еще до отправки генерировать можно, если совсем приспичит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 20:38 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
fkfka Ну GUID. Его хоть на клиенте еще до отправки генерировать можно, если совсем приспичит. Хм. Чёт не подумал) А базе не будет «фиговато» от гуида в качестве первичного ключа? Пишу не подумав ) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 20:50 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL А базе не будет «фиговато» от гуида в качестве первичного ключа? Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 22:08 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
если базе "фиговато" уже от единичной вставки, от всяких ухищрений типа "Допустим кладём объект в redis" лучше ей не станет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 22:13 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL, авторКласть в базу и получить из неё ид нового объекта долго.кто тебе сказал, что долго? а твои манипуляции не долго? при нынешних ssd грешно про долго говорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 22:23 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
вадя кто тебе сказал, что долго? Может там на поклажу стопятьсот триггеров навешано. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 23:30 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
love_bach если базе "фиговато" уже от единичной вставки, от всяких ухищрений типа "Допустим кладём объект в redis" лучше ей не станет Не соглашусь. Тестировал и прямо в базу вставлять и сначала в редис . Разница ответа сервера практически на порядок. По крайней мере с выборкой и кэшем в виде редиса. Запрос к базе простецкий. Возвращает ее более 100 строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 23:40 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL По крайней мере с выборкой и кэшем в виде редиса. Еще бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2021, 00:25 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
fkfka AndrewVL А базе не будет «фиговато» от гуида в качестве первичного ключа? Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются. Не может. У гуидов ток одна проблема. Страшно выглядят :) В остальном гуиды маст хев. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2021, 06:06 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL Не соглашусь. Тестировал и прямо в базу вставлять и сначала в редис ну понятно в редис быстрее. а потом что с базой то делать? так то вообще быстрее не сохранять ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2021, 18:54 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL Запрос к базе простецкий. Возвращает ее более 100 строк. не понимаю проблему ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2021, 18:57 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
hVostt fkfka пропущено... Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются. Не может. У гуидов ток одна проблема. Страшно выглядят :) В остальном гуиды маст хев. те гуид в виде ПК в таблице? и отдавать клиенту набор данных с ключами не 1,2,3 , а страшные длинные строки?) с гуидом, ну или с глобальным счетчиком на все таблицы в редисе только одна проблема - руками в базу не добавишь ничего. с гуидом еще можно. а со счетчиком в редисе уже нет - рассинхрон ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 12:45 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL и отдавать клиенту набор данных с ключами не 1,2,3 , а страшные длинные строки?) Целое число - 8 байт. GUID - 16 байт. "Страшные длинные строки" только в голове у не совсем компетентных людей. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 14:23 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, 16 байт? недавно встретил реализацию, где guid хранился как текст, да еще и в юникоде ) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 15:09 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
Я и говорю - у не совсем компетентных людей . ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 15:04 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Я и говорю - у не совсем компетентных людей . у всех компетенции разные Что посоветует компетентный человек? Если совсем по простому. есть счет. приходит с клиента его шапка вместе с двумя строками тела. Идентифицировать что это один объект не проблема ) guid как то сомнительно , даже если хранить его в FB как CHAR(16) CHARACTER SET OCTETS Да и конвертировать его придется постоянно отдавая клиенту. Да и все ж базе оперировать в индексах с int или guid тоже разница есть, плюс в наличии еще помимо ПК еще и ФК. почитал как делаю всякие фэйсбуки и тд. получается так. при получении новых записей с клиента дергают какой то сервис , который отдает уникальный ИД в пределах всей базы. ну тот же редис со счетчиком. ну и далее уже после ответа клиенту добавляют в медленную базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 15:17 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL те гуид в виде ПК в таблице? и отдавать клиенту набор данных с ключами не 1,2,3 , а страшные длинные строки?) Страшные длинные строки это только на экране. При хранении это 128 бит, что всего в 4 раза больше int, т.е. париться на тему, что это типа много-долго-дорого -- просто смешно. Это ничто. AndrewVL с гуидом, ну или с глобальным счетчиком на все таблицы в редисе только одна проблема - руками в базу не добавишь ничего. с гуидом еще можно. а со счетчиком в редисе уже нет - рассинхрон Ну так в чём проблема-то? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2022, 07:51 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL почитал как делаю всякие фэйсбуки и тд. получается так. при получении новых записей с клиента дергают какой то сервис , который отдает уникальный ИД в пределах всей базы. ну тот же редис со счетчиком. ну и далее уже после ответа клиенту добавляют в медленную базу. Ну еси вы такое где-то там прочитали на заборе, ну так оно конечно же чистая правда :) В общем, непонятно чего вы хотите, решение вроде подсказали. Какие-то счётчики, медленные базы, редис с нецелевым использованием... ну хочется страдать, зачем мы будем мешать? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2022, 07:55 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL Да и конвертировать его придется постоянно отдавая клиенту. Зачем? Не надо его конвертировать, отдавай как есть. AndrewVL Да и все ж базе оперировать в индексах с int или guid тоже разница есть Нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2022, 14:48 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
AndrewVL Сумбурно слегка, но думаю понятно На текущий момент понятно, что Вы защищаетесь от несуществующей проблемы. Защититься от рассинхрона в целом очень просто: достаточно заранее запросить у базы набор идентификаторов и по мере поступления выдавать их объектам. Если это слишком сложно, можно использовать гуиды, тоже ничего страшного. Вот чего точно не стоит делать, так это, собирая велосипед, прикидывать: можно, конечно, поставить коробку передач от "мерседеса", но она ведь не выдержит движения со скоростью свыше 10 км/с, надо что-то получше. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2022, 11:06 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
hVostt fkfka пропущено... Теоретически может, Но это целиком зависит от конкретной БД и надо проверять для конкретного случая. Дело не в длине поля (она мало на что влияет), а в том, что "стандартные" GUID-ы в отличии от sequence/identity совершенно не последовательно генерируются. Не может. У гуидов ток одна проблема. Страшно выглядят :) В остальном гуиды маст хев. Можешь попробовать сравнить ради прикола: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 23:58 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
fkthat, здесь это делается так: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 17:48 |
|
Вопрос по архитектуре
|
|||
---|---|---|---|
#18+
softwarer fkthat, здесь это делается так: Ты меня хоть до конца читал? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 20:06 |
|
|
Start [/forum/topic.php?fid=33&tid=1547036]: |
0ms |
get settings: |
34ms |
get forum list: |
10ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
98ms |
get topic data: |
38ms |
get forum data: |
6ms |
get page messages: |
981ms |
get tp. blocked users: |
3ms |
others: | 151ms |
total: | 1333ms |
0 / 0 |