Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Простите, опечатка вкралась. Хотел написать так: delete from table_b b where b.id = @a_pk and b.date not in (select top 29 t.date from table_b t where id = @a_pk order by t.date desc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 04:13 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
А если так Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 04:46 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
такое будет работать.... только не для 10 миллионов записей в течении часа. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 05:39 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Пошли по кругу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 06:56 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Я имел ввиду для каждой записи в рабочем режиме. Мне кажется , надо думать в сторону обработки именно в рабочем режиме. а если так select FK from table_b having count(PK) > 30 Разбивается на интервалы с приемлемым значением записей delete from table_b b where b.FK in (PK bp интервала) and b.PK not in (select top 30 PK from table_b whehe table_b.FK = b.FK) То есть обрабатывать код кусками, хранить необработанные куски, если ночи не хватит ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 07:42 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
папа Карлоза посл. 30 дней удаляем сейчас и как бы работает без проблем..... проблема в том, что по некоторым ИД записи в логе появляются скажем раз в год или два года, без системно, но далеко не каждый день, именно поэтому поступило требование хранить последние Н(30-40) обзоров. апдейт не подходит совсем... дата (в виде инта) в индексе и никуда ты от нее не денешься... было бы интересно посмотреть на солюшен с пометкой записей которые надо удалить.... ну и между делом..... тут код привели.... Код: plaintext так никто не удаляет.... ибо индексы не работают..... Код: plaintext 1. 2. тьщательнее товарищи.... не допускаем тейблсканов..... ;) А я ведь недаром указал версию СУБД, когда такой "странный" запрос с конвертацией даты привел. На Syabse ASE в такой форме запрос работает быстрее, нежели с getdate(), т.к. оптимизатор сначала вычисляет выражение, а потом использует его, как переменную, а преобразование же char->datetime происходит автоматом. И, как ни странно, никакого tablescan не происходит. Вот такой загадочный Sybase :0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 09:54 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
папа Карлотакое будет работать.... только не для 10 миллионов записей в течении часа. :( Друг мой, я вам уже намекал. Разделите понятия физического и логического удаления,идея то старая-престарая! В мастер-таблице вводится поле/флаг "IsDeleted" (хотя идея применима не только к удалению!). Ну и, когда надобно удалять, мы выставляем этот флаг. Например есть 10000 записей в мастер-таблице подлежащих удалению, а у каждой, в среднем например, по 500 дочерей. При удалении мы модифицирует поле IsDeleted у 10000 записей(дочки нас сейчас не интересуют и это Главный наш козырьмы займемся ими как стемнеет,в соответствии с регламентом). Разница очевидна: пометить на удаление 10000 записей можно за приемлемое время даже на вашей хилой технике (но не 10000+10000 х 5000). Вот собственно и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 14:47 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Ортодокс , кто тебе сказал что мне надо с мастера что-то удалять? :) В мастере как есть 7 млн записей так и есть... они никуда не уходят.... задача для каждой "мастер" записи хранить не более тридцати-сорока-пятидесити (в зависимости от установок) "чайлд" записей. у не против хранить счетчик где-то, но(!) прикол закулючается в том, что 80% мастер записей будут иметь 30 чайлдов в течении 1го месяца.... 98% мастер записей будут иметь 30 чайлдов в течении полугода.... т.е. получается что счетчик то можно хранить, только толку по прошествии полугода от этого счетчика не будет никакой, ибо 98% записей все равно набо обрабатывать.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 21:46 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
папа Карло Ортодокс , кто тебе сказал что мне надо с мастера что-то удалять? :) В мастере как есть 7 млн записей так и есть... они никуда не уходят.... задача для каждой "мастер" записи хранить не более тридцати-сорока-пятидесити (в зависимости от установок) "чайлд" записей. у не против хранить счетчик где-то, но(!) прикол закулючается в том, что 80% мастер записей будут иметь 30 чайлдов в течении 1го месяца.... 98% мастер записей будут иметь 30 чайлдов в течении полугода.... т.е. получается что счетчик то можно хранить, только толку по прошествии полугода от этого счетчика не будет никакой, ибо 98% записей все равно набо обрабатывать.... Да можно и детали и любой поддетали искуственно создать соподчинения вводом парой полей..кока-нить xID и xParentID и никто незапрещает им иметь тип "DateTime...", ну а дальше можете держать подчиненных(в этой же самой таблице) сколько удобно, можно и менять это число на ходу, а дальше...? Сказанное остается в силе, блин! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2005, 00:09 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Ортодокс, код в студию.... с таблицами.... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2005, 04:21 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
папа КарлоОртодокс, код в студию.... с таблицами.... :) Принцип решения, я думаю понятен всем, но вот разработать и отладить код, это батенька, придется попотеть А ктож нынче потеет за бесплатно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2005, 10:35 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Ортодокс, то что ты там придумал совсем не разшает задачи которая поставлена... тут хоть потей хоть не потей... если бы ты знал как сделать, то написал бы хотябы воркфлоу для поставленной задачи, которое не требует кода и при известном подходе пишется за 15 минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2005, 22:57 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Workflow (тьфу ты,слово то какое заскорузлое) пущай пионэры пишуть, им делать нехрена...туды яго в качель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2005, 02:28 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Programmer_OrtodoxWorkflow (тьфу ты,слово то какое заскорузлое) пущай пионэры пишуть, им делать нехрена...туды яго в качель ну значит только бакланить и умеешь, дедушка. ЗЫ Уа-ха-ха.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2005, 03:23 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Я весьма и весьма загружен в последнее время, только презренный металл может заставить меня повернуть круто носом к ветру! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2005, 05:33 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Если говорить серьезно, то вы совершенно напрасно так пренебрегли высказанной идеей! Во многих системах, критичных ко времени реакции, подобные манипуляции с данными, откладываются на потом, НО, бех ужерба для "здоровья", т.е. на логическом уровне удаления сделаны, а фактическая черная работа оставлена на потом, это и операционные системы всех мастей и не только...А тщательная,детальная и скрупулезная проработка требует сил и времени,хотя многим может быть легко убедить самих себя в обратном... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2005, 05:49 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
update может оказаться предпочтительнее, поскольку delete и последующий insert могут привести к фрагментации табличного/файлового пространства, или как там оно называется в MSSQL, а при таких объемах это должно привести к сильным тормозам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2005, 12:53 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
BrokenPotupdate может оказаться предпочтительнее, поскольку delete и последующий insert могут привести к фрагментации табличного/файлового пространства, или как там оно называется в MSSQL, а при таких объемах это должно привести к сильным тормозам. дефрагментируем раз в неделю на выходных и индексы пересоздаем.... так что особой проблемы нет... апдейты не получится делать.... логическое удаление.... это один из вариантов.... хочется посмотреть на альтернативы.. у меня в голове два подхода... мне охота посмотреть что народ думает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2005, 02:15 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
папа Карло апдейты не получится делать.... Папа Карло, а можете привести аргументы, почему не проходит Update? Кроме того, если уж вопрос вызвал такой интерес, то почему бы не представить структуру дочерней таблицы, хотя бы в части полей, которые входят в индексы. И еще, будут ли оглашены "два подхода", когда никто не придумает походящее решение. Если останутся только они, то это же самое "крутое" решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2005, 13:42 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Если в реальном режиме какие-нибудь графики не создаются и длина записи во второй таблице фиксирована, то вторая таблица вообще не нужна. Надо в первую таблицу добавит счетчик, и буфер на N записей и работать только c Insert и Update. Или, на худой конец счетчик, и буфер на вторую таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2005, 14:27 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Забыл уж MSSQL,но: Процедура добавления в лог: Берем, открываем курсор со всеми записями table_b, лежащими под нужной, отсортированными по дате в обратном порядке (старые - в конце). Идем по курсору. Если дошли до 30-й записи, то апдейтим дату, инфу. Если на 29 (или менее) записи кончились - то инсертим новую. Вот только дату из PK надо выкинуть (для 30 записей на одного папу второе поле, фактически, имеет кардинальность 1/30 против 1/7000000 для ID). И один раз прочистить лог, чтобы не было более 30. В качестве поддержки в проход по курсору можно добавить удаление того, что старее 30 записей - de facto, выполняться не будет. Итого - на одну запись открывется не более 2 курсоров. Бонусы - в учтоявшемся режиме совсем не перестраиваются индексы, а если еще поля фиксированные - то и место не перераспределяется - т.е. нагрузка минимальна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2005, 19:46 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Добавить в обе таблицы по полю: table_a ====== id <pk> latest_version number .... table_b ====== id <pk, fk> (FK to table_a.id) <uk> date <pk> version number <uk> + доп. уник.индекс <id, version> ..... При вставке записи в table_b увеличивать счетчик в таблице table_a на единицу, и использовать данное значение в table_b. На триггере after insert или по регламенту удалять из table_b строки у которых id=? and version < latest_version - 30 индекс как раз должен использоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2005, 18:27 |
|
||
|
задачка про историю...
|
|||
|---|---|---|---|
|
#18+
Все сказано еще на первой странице. Вариантов 2: - явное удаление - использование "уборщика мусора" (мусором считается запись с порядковым номером > 30) Папе карло пора стругать буратину, примеряя реализации к своим требованиям. -- Открытая SmallERP / Архитекторы программных систем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 16:04 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32989995&tid=1545940]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
4ms |
| others: | 237ms |
| total: | 381ms |

| 0 / 0 |
