powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Спор про очередник
25 сообщений из 68, страница 1 из 3
Спор про очередник
    #39092579
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предистория.
Пилю очередник отправки писем и смс.
Структура таблиц содержит весь набор полей необходимый для отправки, т.е. полностью независимый сервис.
Количество строк в таблице - миллионы.
Размерность некоторых полей nvarchar(4000).

Так вот вопрос.
Как лучше сделать?
1) Создать таблицу с битовым полем(флаг отправки) и при успешной отправки сообщения взводить 1.
Сервис для выборки необработанных сообщений пользуется этим полем, где флаг отправки -0.
За такую структуру выступаю я.

Либо.
Сделать таблицу и туда складывать всё то, что должно быть отправлено, а уже при успешной отправки перекидывать отработанные строки в другую таблицу, отправленных.
Тогда выборка необработанных будет не по миллионной таблице, а по маленькой.
Это выбор моего начальника.

Аргументы у нас с ним разные.
И мы решили поспорить, что лучше.
И решили свой спор вынести на SQL.ru
...
Рейтинг: 0 / 0
Спор про очередник
    #39092587
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Спор про очередник
    #39092600
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
Ему этого мало. Я развернул свои аргументы в более развёрнутой форме, но здесь не хочу про это писать.
Нужны чёткие аргументы в пользу конкретного подхода именно от сообщества SQL.RU.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092797
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaAkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
Ему этого мало. Я развернул свои аргументы в более развёрнутой форме, но здесь не хочу про это писать.
Нужны чёткие аргументы в пользу конкретного подхода именно от сообщества SQL.RU.

Четкий аргумент только практика.
Сделайте тестовый стенд.
Проведите на нем нагрузочное тестирование обеих вариантов.
И по результатам сделайте выбор.
:-)
...
Рейтинг: 0 / 0
Спор про очередник
    #39092806
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaТак вот вопрос. Как лучше сделать?
Во-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно.

Первое соображение, которое я принял бы в расчёт - перенос. Если запись достаточно большая и траффик достаточно большой, то на каждую операцию делать паразитные delete N байт и insert N байт - становится довольно большой нагрузкой на базу. Это касается как решения "сделать таблицу", так и более вменяемых - например, партиционирования по битовому флагу. По этому соображению Ваш подход, безусловно, выигрывает.

Второе соображение - выборка неотправленных. Этот запрос должен выбирать примерно 1 / (кол-во дней * кол-во циклов отправки в день), то есть малое относительно размера таблицы количество записей. Здесь я задал бы два вопроса: во-первых, как партиционированы данные по времени и во-вторых, как они физически размещаются на диске.

Если записи ложатся на диск более-менее в естественном порядке, то неотправленные записи будут склонны кластеризироваться (сбиваться в кучу в конце таблицы). Это означает, что индекс по ним будет эффективным средством доступа (даже если число логических чтений окажется велико, физических будет довольно мало). Вы, я так понял, говорите про MSSQL. Сколь мне помнится, в нём поддерживаются частичные индексы, а значит, можно сделать индекс только по неотправленным записям и наслаждаться.

Если записи ложатся на диск вразнобой (ну скажем, если вы делаете clustered key по guid pk), то индекс становится менее эффективным. Впрочем, скорее всего, он всё равно останется лучшим решением, нежели full table scan.

Решение начальника имеет некоторое преимущество в этом моменте, поскольку позволит читать неотправленные без индекса, с помощью многоблочных чтений. Но выигрыш будет сравнительно скромен, постоянные записи из таблицы в таблицу его съедят и не заметят. Кроме того, индексные решения позволят выбирать записи по одной, без "пройди всю выборку от начала до конца"; это удобно если, например, вы заходите сделать несколько независимых экземпляров отправщика, работающих по общей очереди.

Наконец, совершенно очевидно, что статусов "послан" и "не послан" недостаточно для хорошей реализации этой функциональности. Примерный набор необходимых статусов такой:

успешно отправлен

ждёт отправки

находится в процессе отправки (может быть решено блокировкой, но для MS это вряд ли хороший вариант)

невозможно отправить, перманентная ошибка доставки

не удалось отправить, повторить попытку после заданного промежутка времени

Если же кроме отправки надо контролировать ещё и доставку, набор статусов сообразно увеличивается.

Итого - я советовал бы доработать постановку и затем решение без переноса данных, с флагом или типа того.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092815
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро.

Вообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы. Но они все же не очень хороши для БД оперативной обработки транзакций. Так что этот аргумент, скорее всего, все еще не очевиден.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092839
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaСделать таблицу и туда складывать всё то, что должно быть отправлено, а уже при успешной отправки перекидывать отработанные строки в другую таблицу, отправленных.
Тогда выборка необработанных будет не по миллионной таблице, а по маленькой.
я бы сделал конечно так. И дело не в возможностях индексов, а в том что не нужно объединять в одной куче логически не объединяемое. У них общее только то, что оба объекты являются сообщениями (письмами). Но функции обработки списков у них совершенно разные.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092845
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoВообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы.
Вадиииим :(

Тут перекошенное (skewed) распределение. Для sent = false селективность будет очень даже неплохой, во всяком случае на это стоит надеяться :)
...
Рейтинг: 0 / 0
Спор про очередник
    #39092848
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в дополнение... в таблице "не отправленных" полезно иметь статус по какой причине запись там находится. По умолчанию это конечно "новая", но если были какие-то проблемы с отправкой, то заполняить это поле соответствующим статусом.

p.s. выше примерно об этом речь шла
...
Рейтинг: 0 / 0
Спор про очередник
    #39092850
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaТак вот вопрос. Как лучше сделать?
Да, ну и забыл упомянуть - рано или поздно на эту таблицу захочется повесить внешний ключ, и решения "перекладывать из таблички в табличку", как у них водится, сядут в лужу.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092851
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerТут перекошенное (skewed) распределение. Для sent = false селективность будет очень даже неплохой
K.I.S.S.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092856
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerProgaТак вот вопрос. Как лучше сделать?
Да, ну и забыл упомянуть - рано или поздно на эту таблицу захочется повесить внешний ключ, и решения "перекладывать из таблички в табличку", как у них водится, сядут в лужу.
кому захочется и зачем? тебе что-ли?
...
Рейтинг: 0 / 0
Спор про очередник
    #39092864
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmK.I.S.S.
YouTube Video
...
Рейтинг: 0 / 0
Спор про очередник
    #39092870
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

ты свою тупость и ранее показывал, но здесь в очередной раз подтверждаешь что являешься обычным программером-мужланом.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092881
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валер, то, что ты пустое трепло, способное только прийти в топик и нагадить, давно известно всему форуму. Шёл бы ты в привычную тебе среду обитания. Соревноваться с тобой в хамстве я не собираюсь, а в тупости - так и не смогу, пожалуй.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092889
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

выше все сказано 18359602 тупица. Если не в состоянии отвечать на вопросы 18359660 , то просто игнорируй их, вместо подкладывания роликов не по теме. То что ты возвышенный на этом форуме гопник тоже известно давно.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092893
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmвыше все сказано 18359602
У тебя мания величия.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092912
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga,

в такой задаче разница в объемах "исходящие" и "отправленные" - многие порядки. К тому же наборы функций для обработки у них кардинально отличаются. К тому же, со временем, "отправленные" ("входящие") возможно потребуется архивировать. В общем множество причин говорить о них, как о разных списках. Просто много лет подобная задача работает...
...
Рейтинг: 0 / 0
Спор про очередник
    #39092921
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwareriscrafmвыше все сказано 18359602
У тебя мания величия.
есть повод для этого, хотя мании конечно нет. Но тупость кодеров, возводимая в разряд истины, достает иногда. Ты прав. Представь себе поставленную задачу для начала, а потом уже умничай про индексы.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092956
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaПредистория.
Пилю очередник отправки писем и смс.
Структура таблиц содержит весь набор полей необходимый для отправки, т.е. полностью независимый сервис.
Количество строк в таблице - миллионы.
Размерность некоторых полей nvarchar(4000).

Так вот вопрос.
Как лучше сделать?
1) Создать таблицу с битовым полем(флаг отправки) и при успешной отправки сообщения взводить 1.
Сервис для выборки необработанных сообщений пользуется этим полем, где флаг отправки -0.
За такую структуру выступаю я.

Либо.
Сделать таблицу и туда складывать всё то, что должно быть отправлено, а уже при успешной отправки перекидывать отработанные строки в другую таблицу, отправленных.
Тогда выборка необработанных будет не по миллионной таблице, а по маленькой.
Это выбор моего начальника.

Аргументы у нас с ним разные.
И мы решили поспорить, что лучше.
И решили свой спор вынести на SQL.ru


Вообще-то говоря, пофигу, если создать индекс по критерию необходимости отправки.
И если хранить данные по отправленным письмам нужно, то лучше их никуда не копировать, а помечать.
Обычно требующих отправки писем много меньше, чем всех остальных, и индекс будет великолепно работать.
А в некоторых СУБД (напр. oracle) его можно создавать ещё и только для тех записей, которые надо отправлять, т.е. не хранить
индексные записи для тех строк, которые уже отправлены -- индекс будет сам маленьким и будет работать ещё стремительнее.

Вообще, все эти желания что-то откуда-то удалять и переписывать в другие места -- это от технической безграмотности.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092959
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoAkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро.

Вообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы. Но они все же не очень хороши для БД оперативной обработки транзакций. Так что этот аргумент, скорее всего, все еще не очевиден.

вообще-то хорошая , с "отправлено"==1 будет 99% записей, но с "отправлено"==0 -- 1% записей. Это -- очень хорошая селективность.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092963
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВообще, все эти желания что-то откуда-то удалять и переписывать в другие места -- это от технической безграмотности.
на чем основан такой вывод?
...
Рейтинг: 0 / 0
Спор про очередник
    #39092972
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivvadiminfoпропущено...

Вообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы. Но они все же не очень хороши для БД оперативной обработки транзакций. Так что этот аргумент, скорее всего, все еще не очевиден.

вообще-то хорошая , с "отправлено"==1 будет 99% записей, но с "отправлено"==0 -- 1% записей. Это -- очень хорошая селективность.
если функциональность оценивается по критериям "селективности", то это хороший признак "мусорного" решения. Даже если просто нужна куча для хранения отправленных писем, то мешать это все в одной куче с исходящими не стоит. У их даже набор реквизитов может быть разный.
...
Рейтинг: 0 / 0
Спор про очередник
    #39092980
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga,

2
...
Рейтинг: 0 / 0
Спор про очередник
    #39093015
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm,

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


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