172 похожих чатов

Есть групповой чат, есть участники группового чата задача: недопустить создание дубликатов

участников
вопрос: как думаете с точки зрения перфа лучше будет сначала проверить(на уровне прилаги) есть ли такие записи уже или создать ограничение которое будет недопускать дубликаты? скорость первостепенна

12 ответов

6 просмотров

"сначала проверить(на уровне прилаги) есть ли такие записи уже" - а как будет гарантироваться атомарность? Я думаю, что лучше на уровне БД уникальный ключ повесить

How do yo do? В смысле -- как вы планируете сделать, чтобы скорость СОЗДАНИЯ участников была критичной? Просто интересуюсь, есличо.

Артем- Автор вопроса
Dmitriy Sviridov
"сначала проверить(на уровне прилаги) есть ли таки...

не подумал про атомарность даже, спасибо!

Разумеется, надо вешать стандартный unique constraint. Остальное -- как там проверять, как отрабатывать upsert или просто ошыбку -- это ужэ следующий вопрос, варианты разные есть.

Артем- Автор вопроса
Ilya Anfimov
How do yo do? В смысле -- как вы планируете сделат...

в плане требований, нужно чтобы запрос с клиента выполнялся как можно быстрее

Артем
в плане требований, нужно чтобы запрос с клиента в...

Это очень странное требование, на самом деле. Потому что "как можно быстрее" - это вилами по воде, и зависит от кучи факторов

Артем
в плане требований, нужно чтобы запрос с клиента в...

Понимаете, Артём, на ноутбуке с магнитным жёстким диском 5400rpm запросы на создание нового в типичном случае будет давать вам несколько тысяч новых пользователей в секунду. Ну, при достаточно количестве воркеров (десяток-другой). Куда вам столько?

Артем- Автор вопроса
Dmitriy Sviridov
Это очень странное требование, на самом деле. Пото...

вариант 1: 1 секунду эндпоинт выполняется вариант 2: 2 секунды эндпоинт выполняется учитывая что все N вариантов дают одинаковый результат, нужно заюзать самый быстрый вариант

Артем
вариант 1: 1 секунду эндпоинт выполняется вариант...

Если таблица пользователей влезает в память -- то время выполнения операцыи будет примерно один hdd roundtrip, если не влезает -- ближэ к двум. Тип диска не очень важэн, просто у магнитного hdd этот roundtrip -- где-то 7мс, у ssd -- где-то 0.3-1.5мс. И да, если эта операцыя выполняется секунду в типичном случае -- значит у вас там что-то сломано.

Артем- Автор вопроса
Артем
1 2 секунды это рандомные цифры:)

То есть вы не знаете требований к скорости, реальных скоростей и не умеете их оцэнивать. Но занимаетесь оптимизацыей. Не надо так. Я не думаю, что преждевременная оптимизацыя -- это источник бОльшэй части зла в программировании. Но что это порочная практика -- я абсолютно согласен.

Артем
вариант 1: 1 секунду эндпоинт выполняется вариант...

Чтобы эндпоинт выполнялся 1 секунду - это очень "постараться" надо. Даже на слабом VPS эндпоинт будет отвечать в десятки раз быстрее. Понятное дело, что это ещё от нагрузки зависит, от количества индексов на таблице и т.п. Но при любом раскладе вариант с дополнительным запросом из приложения на проверку дубля, во-первых, не даст атомарности, во-вторых, сам по себе будет лишним шагом.

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Карта сайта