|
|
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Предистория. Пилю очередник отправки писем и смс. Структура таблиц содержит весь набор полей необходимый для отправки, т.е. полностью независимый сервис. Количество строк в таблице - миллионы. Размерность некоторых полей nvarchar(4000). Так вот вопрос. Как лучше сделать? 1) Создать таблицу с битовым полем(флаг отправки) и при успешной отправки сообщения взводить 1. Сервис для выборки необработанных сообщений пользуется этим полем, где флаг отправки -0. За такую структуру выступаю я. Либо. Сделать таблицу и туда складывать всё то, что должно быть отправлено, а уже при успешной отправки перекидывать отработанные строки в другую таблицу, отправленных. Тогда выборка необработанных будет не по миллионной таблице, а по маленькой. Это выбор моего начальника. Аргументы у нас с ним разные. И мы решили поспорить, что лучше. И решили свой спор вынести на SQL.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 12:22 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Расскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро. Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 12:31 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
AkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро. Модератор: Тема перенесена из форума "Microsoft SQL Server". Ему этого мало. Я развернул свои аргументы в более развёрнутой форме, но здесь не хочу про это писать. Нужны чёткие аргументы в пользу конкретного подхода именно от сообщества SQL.RU. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 12:37 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaAkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро. Модератор: Тема перенесена из форума "Microsoft SQL Server". Ему этого мало. Я развернул свои аргументы в более развёрнутой форме, но здесь не хочу про это писать. Нужны чёткие аргументы в пользу конкретного подхода именно от сообщества SQL.RU. Четкий аргумент только практика. Сделайте тестовый стенд. Проведите на нем нагрузочное тестирование обеих вариантов. И по результатам сделайте выбор. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 14:35 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaТак вот вопрос. Как лучше сделать? Во-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно. Первое соображение, которое я принял бы в расчёт - перенос. Если запись достаточно большая и траффик достаточно большой, то на каждую операцию делать паразитные delete N байт и insert N байт - становится довольно большой нагрузкой на базу. Это касается как решения "сделать таблицу", так и более вменяемых - например, партиционирования по битовому флагу. По этому соображению Ваш подход, безусловно, выигрывает. Второе соображение - выборка неотправленных. Этот запрос должен выбирать примерно 1 / (кол-во дней * кол-во циклов отправки в день), то есть малое относительно размера таблицы количество записей. Здесь я задал бы два вопроса: во-первых, как партиционированы данные по времени и во-вторых, как они физически размещаются на диске. Если записи ложатся на диск более-менее в естественном порядке, то неотправленные записи будут склонны кластеризироваться (сбиваться в кучу в конце таблицы). Это означает, что индекс по ним будет эффективным средством доступа (даже если число логических чтений окажется велико, физических будет довольно мало). Вы, я так понял, говорите про MSSQL. Сколь мне помнится, в нём поддерживаются частичные индексы, а значит, можно сделать индекс только по неотправленным записям и наслаждаться. Если записи ложатся на диск вразнобой (ну скажем, если вы делаете clustered key по guid pk), то индекс становится менее эффективным. Впрочем, скорее всего, он всё равно останется лучшим решением, нежели full table scan. Решение начальника имеет некоторое преимущество в этом моменте, поскольку позволит читать неотправленные без индекса, с помощью многоблочных чтений. Но выигрыш будет сравнительно скромен, постоянные записи из таблицы в таблицу его съедят и не заметят. Кроме того, индексные решения позволят выбирать записи по одной, без "пройди всю выборку от начала до конца"; это удобно если, например, вы заходите сделать несколько независимых экземпляров отправщика, работающих по общей очереди. Наконец, совершенно очевидно, что статусов "послан" и "не послан" недостаточно для хорошей реализации этой функциональности. Примерный набор необходимых статусов такой: успешно отправлен ждёт отправки находится в процессе отправки (может быть решено блокировкой, но для MS это вряд ли хороший вариант) невозможно отправить, перманентная ошибка доставки не удалось отправить, повторить попытку после заданного промежутка времени Если же кроме отправки надо контролировать ещё и доставку, набор статусов сообразно увеличивается. Итого - я советовал бы доработать постановку и затем решение без переноса данных, с флагом или типа того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 14:42 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
AkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро. Вообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы. Но они все же не очень хороши для БД оперативной обработки транзакций. Так что этот аргумент, скорее всего, все еще не очевиден. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 14:53 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaСделать таблицу и туда складывать всё то, что должно быть отправлено, а уже при успешной отправки перекидывать отработанные строки в другую таблицу, отправленных. Тогда выборка необработанных будет не по миллионной таблице, а по маленькой. я бы сделал конечно так. И дело не в возможностях индексов, а в том что не нужно объединять в одной куче логически не объединяемое. У них общее только то, что оба объекты являются сообщениями (письмами). Но функции обработки списков у них совершенно разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:11 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
vadiminfoВообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы. Вадиииим :( Тут перекошенное (skewed) распределение. Для sent = false селективность будет очень даже неплохой, во всяком случае на это стоит надеяться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:14 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
в дополнение... в таблице "не отправленных" полезно иметь статус по какой причине запись там находится. По умолчанию это конечно "новая", но если были какие-то проблемы с отправкой, то заполняить это поле соответствующим статусом. p.s. выше примерно об этом речь шла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:15 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaТак вот вопрос. Как лучше сделать? Да, ну и забыл упомянуть - рано или поздно на эту таблицу захочется повесить внешний ключ, и решения "перекладывать из таблички в табличку", как у них водится, сядут в лужу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:16 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarerТут перекошенное (skewed) распределение. Для sent = false селективность будет очень даже неплохой K.I.S.S. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:17 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarerProgaТак вот вопрос. Как лучше сделать? Да, ну и забыл упомянуть - рано или поздно на эту таблицу захочется повесить внешний ключ, и решения "перекладывать из таблички в табличку", как у них водится, сядут в лужу. кому захочется и зачем? тебе что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:19 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
iscrafmK.I.S.S. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:22 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarer, ты свою тупость и ранее показывал, но здесь в очередной раз подтверждаешь что являешься обычным программером-мужланом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:25 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Валер, то, что ты пустое трепло, способное только прийти в топик и нагадить, давно известно всему форуму. Шёл бы ты в привычную тебе среду обитания. Соревноваться с тобой в хамстве я не собираюсь, а в тупости - так и не смогу, пожалуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:32 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarer, выше все сказано 18359602 тупица. Если не в состоянии отвечать на вопросы 18359660 , то просто игнорируй их, вместо подкладывания роликов не по теме. То что ты возвышенный на этом форуме гопник тоже известно давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:38 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
iscrafmвыше все сказано 18359602 У тебя мания величия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:41 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Proga, в такой задаче разница в объемах "исходящие" и "отправленные" - многие порядки. К тому же наборы функций для обработки у них кардинально отличаются. К тому же, со временем, "отправленные" ("входящие") возможно потребуется архивировать. В общем множество причин говорить о них, как о разных списках. Просто много лет подобная задача работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:56 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwareriscrafmвыше все сказано 18359602 У тебя мания величия. есть повод для этого, хотя мании конечно нет. Но тупость кодеров, возводимая в разряд истины, достает иногда. Ты прав. Представь себе поставленную задачу для начала, а потом уже умничай про индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 16:01 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaПредистория. Пилю очередник отправки писем и смс. Структура таблиц содержит весь набор полей необходимый для отправки, т.е. полностью независимый сервис. Количество строк в таблице - миллионы. Размерность некоторых полей nvarchar(4000). Так вот вопрос. Как лучше сделать? 1) Создать таблицу с битовым полем(флаг отправки) и при успешной отправки сообщения взводить 1. Сервис для выборки необработанных сообщений пользуется этим полем, где флаг отправки -0. За такую структуру выступаю я. Либо. Сделать таблицу и туда складывать всё то, что должно быть отправлено, а уже при успешной отправки перекидывать отработанные строки в другую таблицу, отправленных. Тогда выборка необработанных будет не по миллионной таблице, а по маленькой. Это выбор моего начальника. Аргументы у нас с ним разные. И мы решили поспорить, что лучше. И решили свой спор вынести на SQL.ru Вообще-то говоря, пофигу, если создать индекс по критерию необходимости отправки. И если хранить данные по отправленным письмам нужно, то лучше их никуда не копировать, а помечать. Обычно требующих отправки писем много меньше, чем всех остальных, и индекс будет великолепно работать. А в некоторых СУБД (напр. oracle) его можно создавать ещё и только для тех записей, которые надо отправлять, т.е. не хранить индексные записи для тех строк, которые уже отправлены -- индекс будет сам маленьким и будет работать ещё стремительнее. Вообще, все эти желания что-то откуда-то удалять и переписывать в другие места -- это от технической безграмотности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 16:24 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
vadiminfoAkinaРасскажите начальнику, что существует такая фигня, как индексы. И что выборка по фиксированному значению из индекса выполняется очень быстро. Вообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы. Но они все же не очень хороши для БД оперативной обработки транзакций. Так что этот аргумент, скорее всего, все еще не очевиден. вообще-то хорошая , с "отправлено"==1 будет 99% записей, но с "отправлено"==0 -- 1% записей. Это -- очень хорошая селективность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 16:26 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
MasterZivВообще, все эти желания что-то откуда-то удалять и переписывать в другие места -- это от технической безграмотности. на чем основан такой вывод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 16:30 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
MasterZivvadiminfoпропущено... Вообще-то тут плохая селективность для обычных индексов (B - деревьев): конка принимает всего два значения. Т.е. тут нужны Битмап-индексы. Но они все же не очень хороши для БД оперативной обработки транзакций. Так что этот аргумент, скорее всего, все еще не очевиден. вообще-то хорошая , с "отправлено"==1 будет 99% записей, но с "отправлено"==0 -- 1% записей. Это -- очень хорошая селективность. если функциональность оценивается по критериям "селективности", то это хороший признак "мусорного" решения. Даже если просто нужна куча для хранения отправленных писем, то мешать это все в одной куче с исходящими не стоит. У их даже набор реквизитов может быть разный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 16:36 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
iscrafm, подходы разработчиков и админов сильно различаются :) главное не забыть про почтальона :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 17:04 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
MasterZiv вообще-то хорошая , с "отправлено"==1 будет 99% записей, но с "отправлено"==0 -- 1% записей. Это -- очень хорошая селективность. Ну все же не известно, что 1% не отправится у них. Нельзя же исключать большего там у них. Да, и процент от 100000000 - это как бы 1000000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 17:55 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarerProgaТак вот вопрос. Как лучше сделать? Во-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно. Первое соображение, которое я принял бы в расчёт - перенос. Если запись достаточно большая и траффик достаточно большой, то на каждую операцию делать паразитные delete N байт и insert N байт - становится довольно большой нагрузкой на базу. Это касается как решения "сделать таблицу", так и более вменяемых - например, партиционирования по битовому флагу. По этому соображению Ваш подход, безусловно, выигрывает. Второе соображение - выборка неотправленных. Этот запрос должен выбирать примерно 1 / (кол-во дней * кол-во циклов отправки в день), то есть малое относительно размера таблицы количество записей. Здесь я задал бы два вопроса: во-первых, как партиционированы данные по времени и во-вторых, как они физически размещаются на диске. Если записи ложатся на диск более-менее в естественном порядке, то неотправленные записи будут склонны кластеризироваться (сбиваться в кучу в конце таблицы). Это означает, что индекс по ним будет эффективным средством доступа (даже если число логических чтений окажется велико, физических будет довольно мало). Вы, я так понял, говорите про MSSQL. Сколь мне помнится, в нём поддерживаются частичные индексы, а значит, можно сделать индекс только по неотправленным записям и наслаждаться. Если записи ложатся на диск вразнобой (ну скажем, если вы делаете clustered key по guid pk), то индекс становится менее эффективным. Впрочем, скорее всего, он всё равно останется лучшим решением, нежели full table scan. Решение начальника имеет некоторое преимущество в этом моменте, поскольку позволит читать неотправленные без индекса, с помощью многоблочных чтений. Но выигрыш будет сравнительно скромен, постоянные записи из таблицы в таблицу его съедят и не заметят. Кроме того, индексные решения позволят выбирать записи по одной, без "пройди всю выборку от начала до конца"; это удобно если, например, вы заходите сделать несколько независимых экземпляров отправщика, работающих по общей очереди. Наконец, совершенно очевидно, что статусов "послан" и "не послан" недостаточно для хорошей реализации этой функциональности. Примерный набор необходимых статусов такой: успешно отправлен ждёт отправки находится в процессе отправки (может быть решено блокировкой, но для MS это вряд ли хороший вариант) невозможно отправить, перманентная ошибка доставки не удалось отправить, повторить попытку после заданного промежутка времени Если же кроме отправки надо контролировать ещё и доставку, набор статусов сообразно увеличивается. Итого - я советовал бы доработать постановку и затем решение без переноса данных, с флагом или типа того. Спс, за развёрнутый ответ. Статусы отправки хранятся в таблице логов, но всё равно учёл ваши замечания. По поводу guid, да согласен индекс будет иметь некоторую размытость, но никто не отменяет NEWSEQUENTIALID() для PK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 17:55 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ViPRosProga, 2 Сахават, это не ответ. Не хватает аргументов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 18:21 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Proga, ну, основные доводы Валера привел не надо зацикливаться на инфраструктурных вещах - надо решить задачу оптимизировать хранение и доступ можно и потом - это отдельная песня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 18:27 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ViPRosне надо зацикливаться на инфраструктурных вещах - надо решить задачу оптимизировать хранение и доступ можно и потом - это отдельная песня Сахават, имхо стоит понимать, что есть логический уровень и есть физический уровень. На логическом уровне можно иметь объекты "отправленные письма" и "неотправленные письма", если нужно (хотя я сомневаюсь в целесообразности именно такого разбиения). На физическом уровне нужна адекватная реализация выбранной логической структуры. Вопрос именно про физический уровень. Тащить в него рассуждения, оперирующие логическим уровнем - нелепо. А делать его калькой с логического - тем более нелепо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 18:36 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarer, ну если Proga интересовал только физическая модель, то значит я воще не по делу ввязался :) а так хорошая логическая модель этой задачи практически один в один совпадает с физической модели для РМД (ну, настаивать не буду, так кажется с виду) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 18:44 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ViPRos, типа - письмо ящик почтальон уведомление о доставке или че то еще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 18:45 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ViPRos, адресаты и т.д. ну вощем сами знаете че тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 18:46 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarerВопрос именно про физический уровень. Тащить в него рассуждения, оперирующие логическим уровнем - нелепо. А делать его калькой с логического - тем более нелепо. глянул для интереса подобную систему. Ожидающих отправки 200, отправленных 600 000. Цифры конечно точные не привожу, просто чтобы показать порядок отличия. При этом для "Исходящие" нужен всего один сервис - отправить. В отправленных хранятся и различные временные показатели, фактические маршрутные, сохраняются протоколы и т.д. Предлагаю тебе просто заниматься админством и настраивать индексы чтобы 200 записей выбирать из 600 000 и прочей ерундой, но учить людей плодить кривые решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 18:53 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
По моему достаточно очевидно, что а) одна таблица в состоянии прекрасно работать со статусами писем (новое, в обработке, отправлено, ошибка и т.п.) в случае, если количество записей в ней составляет единицы миллионов б) чем меньше таблица, тем лучше в) отправленные более N дней письма смысла хранить в оперативной таблице не имеет смысла вообще. Так что вполне напрашивается вариант хранить условно неделю все строки в одной таблице, а каким нить джобом, скажем раз в неделю, а не "на каждую операцию делать паразитные delete N байт и insert N байт", перенести данные в другую таблицу, которая в принципе может располагаться в другой файловой группе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:14 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
iscrafmглянул для интереса подобную систему. Ожидающих отправки 200, отправленных 600 000 Как раз для таких систем я написал первое предложение. Cпециально для тебя могу повторить его ещё пару раз: softwarerВо-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно. iscrafmПредлагаю тебе Валер, ты вряд ли поймёшь, но попробую объяснить тебе реальность. Когда-то ты был неплохим разработчиком, способным сказать интересные вещи. Потом ты поверил в собственную гениальность и непогрешимость, в том числе в вопросах (как имеющих отношение к разработке, так и не имеющих), в которых ты вообще ни хрена не разбираешься. В результате у тебя возникла проблема с собеседниками. Тогда ты решил, что тебе следует хамством ставить на место каждого, кто осмелился усомниться в свете мудрости, исходящей от твоего величества. В результате тебя пинками вышвырнули отовсюду. Ты перешёл в когорту обиженных, которые сто раз пафосно уходили, но так и не ушли, и стал тусоваться по форумам, где отсутствуют модераторы. Изредка ты на старом багаже говоришь что-то вменяемое, но в силу непомерного эго считаешь, что "я когда-то сделал вот так" - более чем достаточный аргумент, чтобы именно так делать всегда и везде. Поэтому, как ни печально, на тебя в общем всем насрать. Раз это не изменилось за столько лет, это вряд ли изменится. Соответственно, догадайся, какое мне дело до твоих мнений и рекомендаций. Доступно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:24 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Arm79Так что вполне напрашивается вариант хранить условно неделю все строки в одной таблице Тут может быть вариант еще интересней, но для его оценки данных маловато. Если входящие данные (задания на отправку e-mail/sms) идут не в пакетном режиме, т.е. не загружаются десятками тысяч и более в виде файлов, а идут из каких-нибудь веб-форм, приложений и т.п. и при этом основная масса заданий обрабатывается с первой попытки, то может оказаться, что таблица для данных в обработке вообще не нужна. Все входящее падает в общую очередь, а в таблицу попадают только результаты обработки заданий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:26 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Arm79Так что вполне напрашивается вариант хранить условно неделю все строки в одной таблице, а каким нить джобом, скажем раз в неделю, а не "на каждую операцию делать паразитные delete N байт и insert N байт", перенести данные в другую таблицу, которая в принципе может располагаться в другой файловой группе. В общем это приведёт ровно к тому же паразитному траффику, только оптом и в часы наименьшей нагрузки (что, конечно, несколько лучше). Для Оракла здесь в принципе лучший вариант - партиционирование. При этом место того, что Вы называете "оперативная таблица" займёт столь же маленькая "оперативная партиция", никаких паразитных переносов не потребуется, а если захочется освободить место - желаемый набор архивных партиций можно будет перекинуть прямо на ленту, не удаляя из базы. Для MS - я бы послушал специалистов по этой платформе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:32 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwareriscrafmглянул для интереса подобную систему. Ожидающих отправки 200, отправленных 600 000 Как раз для таких систем я написал первое предложение. Cпециально для тебя могу повторить его ещё пару раз: softwarerВо-первых, этот вопрос имхо вообще не очень важен. Зависит, конечно, от вашей специфики, но если это вспомогательная функция - что скорее всего - и миллионы записей вообще, а не в час, то в общем любое решение будет приемлемым, да и переделать, если захочется, будет нетрудно. я в теме все сообщения читаю. Наше отличие в том, что ты программер и админ в одной конкретной конторе и занимаешься одной конкретной БД. В вопросах построения систем ты совершенно ничего не понимаешь, твоя задача отработать зарплату. Отрабатывай, никто не мешает. Но если несешь бред или специфические "знания" здесь транслируешь, то всегда добавляй "имхо" Доступно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:37 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
я знаю что - много табличек всегда лучше чем одна ни одна модель не является полной не одна задача (из жизни) не решается до конца никогда ... все технические приемы через некоторое время меняются (иногда на противоположную :) исхожу из этих вещей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:40 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwarerДля Оракла здесь в принципе лучший вариант - партиционирование. При этом место того, что Вы называете "оперативная таблица" займёт столь же маленькая "оперативная партиция", никаких паразитных переносов не потребуется, а если захочется освободить место - желаемый набор архивных партиций можно будет перекинуть прямо на ленту, не удаляя из базы. Для MS - я бы послушал специалистов по этой платформе. Я не являюсь сертифицированным специалистом MS SQL, но опыт работы с ней имею достаточно большой. Итак, в MS SQL тоже есть партиционирование. И да, перекладка из таблицы в таблицу менее оптимально, чем использование партиций. Есть одно но. Секционирование поддерживается в редакции Enterprise (см. ссылку сравнение редакций ). Стоит этот энтерпрайз пол ляма рублей, что мне кажется немного дорогим для задачи с письмами, на которую и бесплатного express достаточно (или, если джобы встроенные, то Standart за 50 штук). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:41 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Arm79Стоит этот энтерпрайз пол ляма рублей, что мне кажется немного дорогим для задачи с письмами, на которую и бесплатного express достаточно Если эта задача одна - безусловно. Такую задачу вообще не факт, что стоит решать методами РСУБД. Но в 99% случаев письма - одна из мелких фич системы, решающей уйму других вопросов. Соответственно, я бы не стал строить предположений, какая редакция у топикстартера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 19:48 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Arm79И да, перекладка из таблицы в таблицу менее оптимально, чем использование партиций. лучше вообще ничего не "перекладывать". Это просто создание новых записей в таблице протокола "Отправленные". Зачастую там даже состав реквизитов разный по сравнению с источником. Просто в источнике многая информация просто не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 20:01 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Вообще, начальник прав. Только нужны две таблицы. В одной хранить сами письма, а во второй задания на их отправку, которые можно чистить, при желании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 00:46 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Arm79softwarerДля Оракла здесь в принципе лучший вариант - партиционирование. При этом место того, что Вы называете "оперативная таблица" займёт столь же маленькая "оперативная партиция", никаких паразитных переносов не потребуется, а если захочется освободить место - желаемый набор архивных партиций можно будет перекинуть прямо на ленту, не удаляя из базы. Для MS - я бы послушал специалистов по этой платформе. Я не являюсь сертифицированным специалистом MS SQL, но опыт работы с ней имею достаточно большой. Итак, в MS SQL тоже есть партиционирование. И да, перекладка из таблицы в таблицу менее оптимально, чем использование партиций.Практически то же самое, только в профиль... Arm79Есть одно но. Секционирование поддерживается в редакции Enterprise (см. ссылку сравнение редакций ).Если меня не подводит склероз, то и для Oracle партицирование - удел Enterprise. С еще большим "но" - отдельно (дополнительно) лицензируемая фича. :) Arm79 Стоит этот энтерпрайз пол ляма рублей, что мне кажется немного дорогим для задачи с письмами, на которую и бесплатного express достаточно (или, если джобы встроенные, то Standart за 50 штук).Если у ТСа хилый бюджет, то секционированные представления на Express'e вполне работоспособны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 01:16 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
sphinx_mv, у ТС Enterprise ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 08:27 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ViPRos, Меня интересует именно физическая модель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 08:29 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Arm79, все твои а б в без аргументов не могут восприниматься как подтверждение выбора правильного решения. Чистый субъективизм. А хочется фактов, а не домыслов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 08:37 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Progasphinx_mv, у ТС Enterprise Ну, наконец-то... А то хрустальный шар чего-то лагает... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 09:21 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaArm79, все твои а б в без аргументов не могут восприниматься как подтверждение выбора правильного решения. Чистый субъективизм. А хочется фактов, а не домысловНу, так и сделали бы сначала один вариант, проверили бы его, потом расширили бы его до другого варианта, если первый "не потянет" - делов-то?! :) ЗЫ. Такой топик развели по поводу нескольких миллионов записей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 09:25 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Proga, Первый вариант с индексом будет прекрасно работать. (На таблице с 20 млн записей поиск по индексу практически мгновенен) Соответственно, возникает вопрос "зачем вам усложнение". Если партиционирование понадобится - можно настраивать, но начать можно и без него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 09:27 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaПредистория. Пилю очередник отправки писем и смс. Структура таблиц содержит весь набор полей необходимый для отправки, т.е. полностью независимый сервис. Количество строк в таблице - миллионы. Размерность некоторых полей nvarchar(4000). Так вот вопрос. Как лучше сделать? 1) Создать таблицу с битовым полем(флаг отправки) и при успешной отправки сообщения взводить 1. Сервис для выборки необработанных сообщений пользуется этим полем, где флаг отправки -0. За такую структуру выступаю я. Либо. Сделать таблицу и туда складывать всё то, что должно быть отправлено, а уже при успешной отправки перекидывать отработанные строки в другую таблицу, отправленных. Тогда выборка необработанных будет не по миллионной таблице, а по маленькой. Это выбор моего начальника. Аргументы у нас с ним разные. И мы решили поспорить, что лучше. И решили свой спор вынести на SQL.ru что-то мне кажется вы начальника недопоняли 1я таблица - таблица "писем", в которой лежит всё и в которой для упрощения жизни поставлена галочка отправлено/не отправлено 2я таблица - очередь, которая относительно интенсивно очищается и пополняется; реализованная вашими руками или через сервисброкер очередь совершенно не обязана держать все те же поля что и таблица с письмами - она вполне может держать только ID. или все-таки все поля - сами смотрите. по основной таблице в плане выборок вполне может помочь упомянутый индекс, но только фильтрованный, т.к. с хорошей селективностью значение только одно. общая селективность колонки низкая - там всего 2 значения возможны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 09:32 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Пилю очередник, написал как есть. а очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе. забыл упомянуть сервер. 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 10:28 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Progaа очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе. пилите дальше, пилите. Использование индекса в качестве сущности прекрасный пример того, как простую задачу можно угробить различными заумными схемами и проверками как индексы работают. как раз именно по теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 10:40 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
iscrafmProgaа очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе. пилите дальше, пилите. Использование индекса в качестве сущности прекрасный пример того, как простую задачу можно угробить различными заумными схемами и проверками как индексы работают. как раз именно по теме не обращал на ваши высказывания. но теперь всё же отпишу. Не обнаружил в ваших высказываниях в этой ветке не одного доказательства вашей точки зрения, зачем то начали перепалку с софтварером, хотя я её вообще не ожидал от подкованных и грамотных пользователей этого форума, но это ваше право. может аргументировано докажите свою точку зрения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 10:48 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Proga, смею рекомендовать перестать делать вид что разбираетесь в вопросе и делать молча что начальник скажет. авторочередь для меня это индекс это к специалистам по межсезонным обострениям авторвы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе а это называется "слышал звон, не сильно понимаю, при чем ли здесь он, но в качестве аргумента в пользу чего-то там, еще не решил чего, пожалуй, применю". решение более чем нуля задач под знаменем сих светлых мыслей вполне позволит вам и самостоятельно отсеять зерновые от плевковых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 10:57 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaНе обнаружил в ваших высказываниях в этой ветке не одного доказательства вашей точки зрения ты же говоришь не обнаружил, хотя все сообщения в этой теме просто рассказ о том, как делается у нас. Читать не пробовал для того, чтобы что-то обнаружить? 18361012 вообще-то такие системы много лет работают. какие тебе еще нужны аргументы? можешь посмотреть как устроены почтовые программы для интереса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 10:59 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Пилю очередникProga, смею рекомендовать перестать делать вид что разбираетесь в вопросе и делать молча что начальник скажет. авторочередь для меня это индекс это к специалистам по межсезонным обострениям авторвы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе а это называется "слышал звон, не сильно понимаю, при чем ли здесь он, но в качестве аргумента в пользу чего-то там, еще не решил чего, пожалуй, применю". решение более чем нуля задач под знаменем сих светлых мыслей вполне позволит вам и самостоятельно отсеять зерновые от плевковых. Ваша серость, выйдите из тени, тогда и пообщаемся. тоже мне "шпициалист". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 11:17 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
iscrafmProgaНе обнаружил в ваших высказываниях в этой ветке не одного доказательства вашей точки зрения ты же говоришь не обнаружил, хотя все сообщения в этой теме просто рассказ о том, как делается у нас. Читать не пробовал для того, чтобы что-то обнаружить? 18361012 вообще-то такие системы много лет работают. какие тебе еще нужны аргументы? можешь посмотреть как устроены почтовые программы для интереса. Я всё это читал, не сомневайтесь. А аргумент "у нас так работает" не совсем меня устраивает, хотя тоже имеет право на жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 11:20 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ProgaВаша серость, выйдите из тени, тогда и пообщаемся. тоже мне "шпициалист". это уже к специалистам по проблемам взросления и вопросам самооценки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 11:24 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Proga, изменение цвета ника с серого на синий у твоего собеседника тебе прибавит уверенности? Некто говорит по теме, правда с поддевками, аналогично тому как ты и мне сказал после всех сообщений, что "не увидел аргументов". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 11:25 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Progaаргумент "у нас так работает" не совсем меня устраивает. ну значит у меня нет аргументов, если пример того, как сделано у нас или в других почтовых программах для тебя не аргумент. Публиковать математические расчеты по этой банальности нет смысла. Чуть выше ролик оказывается про тебя. Пили дальше. Твой фаворит оказывается для тебя публиковал 18359689 Индексы не забудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 11:40 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
Progaа очередь для меня это индекс, который построен по полям, которые необходимы для отправки письма, вы не забывайте, что сама таблица может даже не читаться, если данных хватает в самом индексе. Вообще индексы не являются средствами стркутурированя реляционной МД, в отлиции от таблиц. Это все же какие-то физические аспекты СУБД, хранящих данные на вторичных носителях. Т.е. их цель сократить число чтений с дика. В СУБД "ин мемори" они вообще, возможно, могут отсутствовать. Поэтому как бы придавать им модельную роль - "очередь - это индекс", возможно, все еще преждевременно. И кроме того, не исключается, что чтение из таблицы без индексов может быть быстрее, в некоторых случаях. Например, фулл скан в некоторых СУБД допускает считывание нескольких блоков за одну операцию чтения с диска, а с индексом всегда по одному. И тем более для некоторых запросов могут лучше подойти в плане производительности в общем случае, индексы отличные от "построен по полям, которые необходимы для отправки письма,". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 13:31 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
iscrafmя в теме все сообщения читаю. Умница. Теперь попробуй ещё и понимать написанное. А то пока уступаешь даже товарищу сержанту из анекдота . iscrafmНаше отличие в том, что ты программер и админ У нас много отличий. Главное - ты хам с апломбом, живущий в мире собственных фантазий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 13:41 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
softwareriscrafmя в теме все сообщения читаю. Умница. Теперь попробуй ещё и понимать написанное. А то пока уступаешь даже товарищу сержанту из анекдота . горе-специалист, ты бы не тупил так откровенно. Тебя же здесь типа "гуру" считают. И не нужно мне приписывать какие-то ярлыки, у тебя индекс сбоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 13:54 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ТС пусть задумается даже над простейшим вопросом: что быстрее будет обработано INSERT или UPDATE в его ситуации. Это даже не загадка про курицу и яйцо. Но если не хочешь читать о том как делаются очереди, то какова цель создания подобной темы вообще? Потешить ЧСВ свое, дать возможность "поумничать" местным "гуру" типа softwarer на тему индексов, которые в этом вопросе совершенно не при чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2015, 14:02 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
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 - очередь доставки - отдельная сущность и может быть организована другими средствами. Может быть без лога, может быть просто представлением и может ещё куча всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2015, 18:31 |
|
||
|
Спор про очередник
|
|||
|---|---|---|---|
|
#18+
ИМХО очередь на отправку и лог уведомлений - суть разные вещи. Как уже писалось выше, первая может быть реализована "другими средствами": RabbitMQ, MongoDB capped collection. Также сегодня два канала уведомления (email, sms), а завтра попросят push на мобилу добавить, а послезавтра в Exchange кидать, или в Slack, или... И обо всём этом сохранять информацию. А клиент предпочтёт какой-то один канал другим, или будет все использовать. А менеджер захочет кастомизировать шаблон сообщения для каждого канала. А потом захочет статистику смотреть и агрегаты строить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2015, 18:44 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540445]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
165ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 309ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...