|
|
|
Спор про очередник
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39093112&tid=1540445]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 286ms |

| 0 / 0 |

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