powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Спор про очередник
68 сообщений из 68, показаны все 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
Спор про очередник
    #39093066
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
вообще-то хорошая , с "отправлено"==1 будет 99% записей, но с "отправлено"==0 -- 1% записей. Это -- очень хорошая селективность.
Ну все же не известно, что 1% не отправится у них. Нельзя же исключать большего там у них. Да, и процент от 100000000 - это как бы 1000000.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093067
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerProgaТак вот вопрос. Как лучше сделать?
Во-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно.

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

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

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

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

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

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

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

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

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

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

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

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

Итого - я советовал бы доработать постановку и затем решение без переноса данных, с флагом или типа того.

Спс, за развёрнутый ответ.
Статусы отправки хранятся в таблице логов, но всё равно учёл ваши замечания.
По поводу guid, да согласен индекс будет иметь некоторую размытость, но никто не отменяет NEWSEQUENTIALID() для PK.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093097
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosProga,

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

ну, основные доводы Валера привел
не надо зацикливаться на инфраструктурных вещах - надо решить задачу
оптимизировать хранение и доступ можно и потом - это отдельная песня
...
Рейтинг: 0 / 0
Спор про очередник
    #39093112
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosне надо зацикливаться на инфраструктурных вещах - надо решить задачу
оптимизировать хранение и доступ можно и потом - это отдельная песня
Сахават, имхо стоит понимать, что есть логический уровень и есть физический уровень. На логическом уровне можно иметь объекты "отправленные письма" и "неотправленные письма", если нужно (хотя я сомневаюсь в целесообразности именно такого разбиения). На физическом уровне нужна адекватная реализация выбранной логической структуры.

Вопрос именно про физический уровень. Тащить в него рассуждения, оперирующие логическим уровнем - нелепо. А делать его калькой с логического - тем более нелепо.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093119
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

ну если Proga интересовал только физическая модель, то значит я воще не по делу ввязался :)
а так хорошая логическая модель этой задачи практически один в один совпадает с физической модели для РМД (ну, настаивать не буду, так кажется с виду)
...
Рейтинг: 0 / 0
Спор про очередник
    #39093122
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,


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

адресаты и т.д.
ну вощем сами знаете че тут
...
Рейтинг: 0 / 0
Спор про очередник
    #39093133
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВопрос именно про физический уровень. Тащить в него рассуждения, оперирующие логическим уровнем - нелепо. А делать его калькой с логического - тем более нелепо.
глянул для интереса подобную систему. Ожидающих отправки 200, отправленных 600 000. Цифры конечно точные не привожу, просто чтобы показать порядок отличия. При этом для "Исходящие" нужен всего один сервис - отправить. В отправленных хранятся и различные временные показатели, фактические маршрутные, сохраняются протоколы и т.д. Предлагаю тебе просто заниматься админством и настраивать индексы чтобы 200 записей выбирать из 600 000 и прочей ерундой, но учить людей плодить кривые решения.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093151
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему достаточно очевидно, что
а) одна таблица в состоянии прекрасно работать со статусами писем (новое, в обработке, отправлено, ошибка и т.п.) в случае, если количество записей в ней составляет единицы миллионов
б) чем меньше таблица, тем лучше
в) отправленные более N дней письма смысла хранить в оперативной таблице не имеет смысла вообще.


Так что вполне напрашивается вариант хранить условно неделю все строки в одной таблице, а каким нить джобом, скажем раз в неделю, а не "на каждую операцию делать паразитные delete N байт и insert N байт", перенести данные в другую таблицу, которая в принципе может располагаться в другой файловой группе.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093155
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmглянул для интереса подобную систему. Ожидающих отправки 200, отправленных 600 000
Как раз для таких систем я написал первое предложение. Cпециально для тебя могу повторить его ещё пару раз:

softwarerВо-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно.

iscrafmПредлагаю тебе
Валер, ты вряд ли поймёшь, но попробую объяснить тебе реальность.

Когда-то ты был неплохим разработчиком, способным сказать интересные вещи. Потом ты поверил в собственную гениальность и непогрешимость, в том числе в вопросах (как имеющих отношение к разработке, так и не имеющих), в которых ты вообще ни хрена не разбираешься. В результате у тебя возникла проблема с собеседниками. Тогда ты решил, что тебе следует хамством ставить на место каждого, кто осмелился усомниться в свете мудрости, исходящей от твоего величества. В результате тебя пинками вышвырнули отовсюду. Ты перешёл в когорту обиженных, которые сто раз пафосно уходили, но так и не ушли, и стал тусоваться по форумам, где отсутствуют модераторы. Изредка ты на старом багаже говоришь что-то вменяемое, но в силу непомерного эго считаешь, что "я когда-то сделал вот так" - более чем достаточный аргумент, чтобы именно так делать всегда и везде. Поэтому, как ни печально, на тебя в общем всем насрать. Раз это не изменилось за столько лет, это вряд ли изменится. Соответственно, догадайся, какое мне дело до твоих мнений и рекомендаций. Доступно?
...
Рейтинг: 0 / 0
Спор про очередник
    #39093157
kva6513
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Так что вполне напрашивается вариант хранить условно неделю все строки в одной таблице

Тут может быть вариант еще интересней, но для его оценки данных маловато. Если входящие данные (задания на отправку e-mail/sms) идут не в пакетном режиме, т.е. не загружаются десятками тысяч и более в виде файлов, а идут из каких-нибудь веб-форм, приложений и т.п. и при этом основная масса заданий обрабатывается с первой попытки, то может оказаться, что таблица для данных в обработке вообще не нужна. Все входящее падает в общую очередь, а в таблицу попадают только результаты обработки заданий.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093161
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Так что вполне напрашивается вариант хранить условно неделю все строки в одной таблице, а каким нить джобом, скажем раз в неделю, а не "на каждую операцию делать паразитные delete N байт и insert N байт", перенести данные в другую таблицу, которая в принципе может располагаться в другой файловой группе.
В общем это приведёт ровно к тому же паразитному траффику, только оптом и в часы наименьшей нагрузки (что, конечно, несколько лучше).

Для Оракла здесь в принципе лучший вариант - партиционирование. При этом место того, что Вы называете "оперативная таблица" займёт столь же маленькая "оперативная партиция", никаких паразитных переносов не потребуется, а если захочется освободить место - желаемый набор архивных партиций можно будет перекинуть прямо на ленту, не удаляя из базы. Для MS - я бы послушал специалистов по этой платформе.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093165
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwareriscrafmглянул для интереса подобную систему. Ожидающих отправки 200, отправленных 600 000
Как раз для таких систем я написал первое предложение. Cпециально для тебя могу повторить его ещё пару раз:

softwarerВо-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно.
я в теме все сообщения читаю. Наше отличие в том, что ты программер и админ в одной конкретной конторе и занимаешься одной конкретной БД. В вопросах построения систем ты совершенно ничего не понимаешь, твоя задача отработать зарплату. Отрабатывай, никто не мешает. Но если несешь бред или специфические "знания" здесь транслируешь, то всегда добавляй "имхо" Доступно?
...
Рейтинг: 0 / 0
Спор про очередник
    #39093167
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я знаю что -
много табличек всегда лучше чем одна
ни одна модель не является полной
не одна задача (из жизни) не решается до конца никогда
...
все технические приемы через некоторое время меняются (иногда на противоположную :)

исхожу из этих вещей
...
Рейтинг: 0 / 0
Спор про очередник
    #39093172
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДля Оракла здесь в принципе лучший вариант - партиционирование. При этом место того, что Вы называете "оперативная таблица" займёт столь же маленькая "оперативная партиция", никаких паразитных переносов не потребуется, а если захочется освободить место - желаемый набор архивных партиций можно будет перекинуть прямо на ленту, не удаляя из базы. Для MS - я бы послушал специалистов по этой платформе.

Я не являюсь сертифицированным специалистом MS SQL, но опыт работы с ней имею достаточно большой. Итак, в MS SQL тоже есть партиционирование. И да, перекладка из таблицы в таблицу менее оптимально, чем использование партиций.

Есть одно но. Секционирование поддерживается в редакции Enterprise (см. ссылку сравнение редакций ). Стоит этот энтерпрайз пол ляма рублей, что мне кажется немного дорогим для задачи с письмами, на которую и бесплатного express достаточно (или, если джобы встроенные, то Standart за 50 штук).
...
Рейтинг: 0 / 0
Спор про очередник
    #39093180
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Стоит этот энтерпрайз пол ляма рублей, что мне кажется немного дорогим для задачи с письмами, на которую и бесплатного express достаточно
Если эта задача одна - безусловно. Такую задачу вообще не факт, что стоит решать методами РСУБД. Но в 99% случаев письма - одна из мелких фич системы, решающей уйму других вопросов. Соответственно, я бы не стал строить предположений, какая редакция у топикстартера.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093187
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79И да, перекладка из таблицы в таблицу менее оптимально, чем использование партиций.
лучше вообще ничего не "перекладывать". Это просто создание новых записей в таблице протокола "Отправленные". Зачастую там даже состав реквизитов разный по сравнению с источником. Просто в источнике многая информация просто не нужна.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093261
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, начальник прав.
Только нужны две таблицы. В одной хранить сами письма, а во второй задания на их отправку, которые можно чистить, при желании.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093268
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79softwarerДля Оракла здесь в принципе лучший вариант - партиционирование. При этом место того, что Вы называете "оперативная таблица" займёт столь же маленькая "оперативная партиция", никаких паразитных переносов не потребуется, а если захочется освободить место - желаемый набор архивных партиций можно будет перекинуть прямо на ленту, не удаляя из базы. Для MS - я бы послушал специалистов по этой платформе.

Я не являюсь сертифицированным специалистом MS SQL, но опыт работы с ней имею достаточно большой. Итак, в MS SQL тоже есть партиционирование. И да, перекладка из таблицы в таблицу менее оптимально, чем использование партиций.Практически то же самое, только в профиль...
Arm79Есть одно но. Секционирование поддерживается в редакции Enterprise (см. ссылку сравнение редакций ).Если меня не подводит склероз, то и для Oracle партицирование - удел Enterprise.
С еще большим "но" - отдельно (дополнительно) лицензируемая фича. :)
Arm79 Стоит этот энтерпрайз пол ляма рублей, что мне кажется немного дорогим для задачи с письмами, на которую и бесплатного express достаточно (или, если джобы встроенные, то Standart за 50 штук).Если у ТСа хилый бюджет, то секционированные представления на Express'e вполне работоспособны.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093340
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mv, у ТС Enterprise
...
Рейтинг: 0 / 0
Спор про очередник
    #39093341
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Меня интересует именно физическая модель
...
Рейтинг: 0 / 0
Спор про очередник
    #39093342
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, все твои а б в без аргументов не могут восприниматься как подтверждение выбора правильного решения. Чистый субъективизм. А хочется фактов, а не домыслов
...
Рейтинг: 0 / 0
Спор про очередник
    #39093374
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progasphinx_mv, у ТС Enterprise Ну, наконец-то... А то хрустальный шар чего-то лагает... :)
...
Рейтинг: 0 / 0
Спор про очередник
    #39093377
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaArm79, все твои а б в без аргументов не могут восприниматься как подтверждение выбора правильного решения. Чистый субъективизм. А хочется фактов, а не домысловНу, так и сделали бы сначала один вариант, проверили бы его, потом расширили бы его до другого варианта, если первый "не потянет" - делов-то?! :)

ЗЫ. Такой топик развели по поводу нескольких миллионов записей...
...
Рейтинг: 0 / 0
Спор про очередник
    #39093378
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga,
Первый вариант с индексом будет прекрасно работать.
(На таблице с 20 млн записей поиск по индексу практически мгновенен)

Соответственно, возникает вопрос "зачем вам усложнение".
Если партиционирование понадобится - можно настраивать, но начать можно и без него.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093383
ProgaПредистория.
Пилю очередник отправки писем и смс.
Структура таблиц содержит весь набор полей необходимый для отправки, т.е. полностью независимый сервис.
Количество строк в таблице - миллионы.
Размерность некоторых полей nvarchar(4000).

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

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

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

1я таблица - таблица "писем", в которой лежит всё и в которой для упрощения жизни поставлена галочка отправлено/не отправлено
2я таблица - очередь, которая относительно интенсивно очищается и пополняется; реализованная вашими руками или через сервисброкер

очередь совершенно не обязана держать все те же поля что и таблица с письмами - она вполне может держать только ID. или все-таки все поля - сами смотрите. по основной таблице в плане выборок вполне может помочь упомянутый индекс, но только фильтрованный, т.к. с хорошей селективностью значение только одно. общая селективность колонки низкая - там всего 2 значения возможны.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093426
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пилю очередник,
написал как есть.
а очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе.

забыл упомянуть
сервер.
Microsoft SQL Server 2008 (SP3) - 10.0.5828.0 (X64)
Nov 1 2012 22:54:10
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
...
Рейтинг: 0 / 0
Спор про очередник
    #39093444
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progaа очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе.
пилите дальше, пилите. Использование индекса в качестве сущности прекрасный пример того, как простую задачу можно угробить различными заумными схемами и проверками как индексы работают.
как раз именно по теме
...
Рейтинг: 0 / 0
Спор про очередник
    #39093458
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmProgaа очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе.
пилите дальше, пилите. Использование индекса в качестве сущности прекрасный пример того, как простую задачу можно угробить различными заумными схемами и проверками как индексы работают.
как раз именно по теме

не обращал на ваши высказывания. но теперь всё же отпишу.
Не обнаружил в ваших высказываниях в этой ветке не одного доказательства вашей точки зрения, зачем то начали перепалку с софтварером, хотя я её вообще не ожидал от подкованных и грамотных пользователей этого форума, но это ваше право.
может аргументировано докажите свою точку зрения?
...
Рейтинг: 0 / 0
Спор про очередник
    #39093468
Proga,

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

решение более чем нуля задач под знаменем сих светлых мыслей вполне позволит вам и самостоятельно отсеять зерновые от плевковых.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093469
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaНе обнаружил в ваших высказываниях в этой ветке не одного доказательства вашей точки зрения
ты же говоришь не обнаружил, хотя все сообщения в этой теме просто рассказ о том, как делается у нас. Читать не пробовал для того, чтобы что-то обнаружить?

18361012

вообще-то такие системы много лет работают.
какие тебе еще нужны аргументы? можешь посмотреть как устроены почтовые программы для интереса.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093490
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пилю очередникProga,

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

решение более чем нуля задач под знаменем сих светлых мыслей вполне позволит вам и самостоятельно отсеять зерновые от плевковых.
Ваша серость, выйдите из тени, тогда и пообщаемся.
тоже мне "шпициалист".
...
Рейтинг: 0 / 0
Спор про очередник
    #39093495
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmProgaНе обнаружил в ваших высказываниях в этой ветке не одного доказательства вашей точки зрения
ты же говоришь не обнаружил, хотя все сообщения в этой теме просто рассказ о том, как делается у нас. Читать не пробовал для того, чтобы что-то обнаружить?

18361012

вообще-то такие системы много лет работают.
какие тебе еще нужны аргументы? можешь посмотреть как устроены почтовые программы для интереса.
Я всё это читал, не сомневайтесь. А аргумент "у нас так работает" не совсем меня устраивает, хотя тоже имеет право на жизнь.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093504
ProgaВаша серость, выйдите из тени, тогда и пообщаемся.
тоже мне "шпициалист".
это уже к специалистам по проблемам взросления и вопросам самооценки
...
Рейтинг: 0 / 0
Спор про очередник
    #39093505
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga,

изменение цвета ника с серого на синий у твоего собеседника тебе прибавит уверенности? Некто говорит по теме, правда с поддевками, аналогично тому как ты и мне сказал после всех сообщений, что "не увидел аргументов".
...
Рейтинг: 0 / 0
Спор про очередник
    #39093523
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progaаргумент "у нас так работает" не совсем меня устраивает.
ну значит у меня нет аргументов, если пример того, как сделано у нас или в других почтовых программах для тебя не аргумент. Публиковать математические расчеты по этой банальности нет смысла. Чуть выше ролик оказывается про тебя. Пили дальше. Твой фаворит оказывается для тебя публиковал 18359689 Индексы не забудь.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093680
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progaа очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе.


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

iscrafmНаше отличие в том, что ты программер и админ
У нас много отличий. Главное - ты хам с апломбом, живущий в мире собственных фантазий.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093726
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwareriscrafmя в теме все сообщения читаю.
Умница. Теперь попробуй ещё и понимать написанное. А то пока уступаешь даже товарищу сержанту из анекдота .

горе-специалист, ты бы не тупил так откровенно. Тебя же здесь типа "гуру" считают. И не нужно мне приписывать какие-то ярлыки, у тебя индекс сбоит.
...
Рейтинг: 0 / 0
Спор про очередник
    #39093744
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС пусть задумается даже над простейшим вопросом: что быстрее будет обработано INSERT или UPDATE в его ситуации. Это даже не загадка про курицу и яйцо. Но если не хочешь читать о том как делаются очереди, то какова цель создания подобной темы вообще? Потешить ЧСВ свое, дать возможность "поумничать" местным "гуру" типа softwarer на тему индексов, которые в этом вопросе совершенно не при чем?
...
Рейтинг: 0 / 0
Спор про очередник
    #39094569
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaПилю очередник,
написал как есть.
а очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе.

забыл упомянуть
сервер.
Microsoft SQL Server 2008 (SP3) - 10.0.5828.0 (X64)
Nov 1 2012 22:54:10
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Но не стоит забывать, при обновлении будет обновлятся и страница с записью и индекс. => Аналогично тому, как если бы была отделная таблица.

Я за разделение.
1. Таблица для сообжений с временем доставки
2. Таблица для статуса отправки. (Возможно нужно ещё время попытки доставки и кол-во попыток.)
И таки да: вставлять/обновлять/удалять в таблицу 2 и обновлять таблицу 1.

Поводы для разделения тоже важны: Таблица 2 - очередь доставки - отдельная сущность и может быть организована другими средствами. Может быть без лога, может быть просто представлением и может ещё куча всего.
...
Рейтинг: 0 / 0
Спор про очередник
    #39094577
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО очередь на отправку и лог уведомлений - суть разные вещи.

Как уже писалось выше, первая может быть реализована "другими средствами": RabbitMQ, MongoDB capped collection.
Также сегодня два канала уведомления (email, sms), а завтра попросят push на мобилу добавить, а послезавтра в Exchange кидать, или в Slack, или... И обо всём этом сохранять информацию.
А клиент предпочтёт какой-то один канал другим, или будет все использовать.
А менеджер захочет кастомизировать шаблон сообщения для каждого канала. А потом захочет статистику смотреть и агрегаты строить.
...
Рейтинг: 0 / 0
68 сообщений из 68, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Спор про очередник
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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