Фоновые задания, общие данные и синхронизация

1. alex_sh2008 4 13.04.18 22:50 Сейчас в теме
Возникла задача с необходимостью использования одной таблицы значений, таблица значений может достигать 100тыс записей. Записи в таблице добавляться или удаляться разными фоновыми заданиям, если задание использует для обработки какую то запись, то остальные пропускают ее и двигаются дальше по таблице. Весь процесс происходит до полного удаления всех записей в таблице. С реализацией в 1С зашел в тупик.
По теме из базы знаний
Найденные решения
4. schweigen 14.04.18 05:37 Сейчас в теме
(1) Сформируй вопрос конкретно, или разбей на подвопросы, что именно вызывает затруднения. Не понятно, что ты хочешь услышать.

1. Я бы использовал регистры. Думаю многие со мной согласятся.
2. Для пропуска записей логично использовать Управляемые блокировки (при условии использования регистра)
3. Таблицу значений от одного фонового задания другому можно передать через Временное хранилище. см. ПоместитьВоВременноеХранилище, ПолучитьИзВременногоХранилища. Адреса хранилищ можно хранить в отдельной таблице / регистре

Таблицу данных хранить не нужно? Поэтому ты используешь ТЗ?
Можешь написать задачу в личку, если здесь не хочешь - обмозгуем.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 13.04.18 23:40 Сейчас в теме
(1) использование ТЗ обязательное условие?
Может рассмотреть возможность использовать РС?
3. alex_sh2008 4 14.04.18 00:45 Сейчас в теме
(2)Не обязательное, но использование объектов базы данных не подходит, слишком большой объем транзакций получается, если учесть что идет обработка в суммарном значении около 100млн записей и более. Даже думал создавать в каждом задании свою таблицу, но не придумал, как передать из одного задания в другие задания, данные записи, для того что бы те не использовали эти данные для обработки, когда им попадутся такие данные.
5. TODD22 18 14.04.18 06:47 Сейчас в теме
(3)
Не обязательное, но использование объектов базы данных не подходит, слишком большой объем транзакций получается, если учесть что идет обработка в суммарном значении около 100млн записей и более. Даже думал создавать в каждом задании свою таблицу, но не придумал, как передать из одного задания в другие задания, данные записи, для того что бы те не использовали эти данные для обработки, когда им попадутся такие данные.

Что за данные? И откуда такой объём для одной таблицы, может как то можно эту таблицу предобрабатывать? Покажи какие строки в ТЗ и что именно с ТЗ делают "разные фоновые задания" что именно добавляют и удаляют.

Как вариант можно пойти от данных. До формирования ТЗ для обработки фильтровать на разные ТЗ по определённому условию, складывать в одну ТЗ "красные шары", в другую "зелёные шары". Каждую ТЗ обрабатывать своим фоновым заданием. Результат работы функций сливать в одну ТЗ.

Можно разбивать ТЗ на диапазоны или делать выборку из ТЗ по каким то условиям и обрабатывать результат в разных фоновых заданиях. Обработанный результат сливать в одну таблицу.

Сложно что то придумать не понимая какие данные в ТЗ, что пишется и читается фоновыми заданиями.
6. alex_sh2008 4 14.04.18 09:00 Сейчас в теме
(5)Ну по сути это иерархические ссылки на объекты базы данных, каждая запись таблицы может породить еще записи или может быть удалена, зависит от того какой алгоритм обработки этой записи, для каждой ссылки свой алгоритм обработки.
9. alex_sh2008 4 14.04.18 09:32 Сейчас в теме
(5)
ожно разбивать ТЗ на диапазоны или делать выборку из ТЗ по каким то условиям и обрабатывать результат в разных фоновых заданиях. Обработанный результат сливать в одну таблицу.

Все что есть в базе все туда может попасть.
4. schweigen 14.04.18 05:37 Сейчас в теме
(1) Сформируй вопрос конкретно, или разбей на подвопросы, что именно вызывает затруднения. Не понятно, что ты хочешь услышать.

1. Я бы использовал регистры. Думаю многие со мной согласятся.
2. Для пропуска записей логично использовать Управляемые блокировки (при условии использования регистра)
3. Таблицу значений от одного фонового задания другому можно передать через Временное хранилище. см. ПоместитьВоВременноеХранилище, ПолучитьИзВременногоХранилища. Адреса хранилищ можно хранить в отдельной таблице / регистре

Таблицу данных хранить не нужно? Поэтому ты используешь ТЗ?
Можешь написать задачу в личку, если здесь не хочешь - обмозгуем.
7. alex_sh2008 4 14.04.18 09:10 Сейчас в теме
(4)
Можешь написать задачу в личку, если здесь не хочешь - обмозгуем.

Общая задача удаление объектов из базы данные по заданным правилам. Например организации с одновременной проверкой на коллизии.
8. alex_sh2008 4 14.04.18 09:25 Сейчас в теме
(4)
Для пропуска записей логично использовать Управляемые блокировки (при условии использования регистра)

Так и делаю, но без связи между заданиями, это не срабатывает, скорость обработки высокая, периодически задания одновременно начинают, конфликтовать друг с другом.
10. alex_sh2008 4 14.04.18 10:21 Сейчас в теме
(4)
Таблицу данных хранить не нужно? Поэтому ты используешь ТЗ?

Не только, потому что ТЗ быстрее, и сидит в памяти сервера, а не в базе sql сервера.
15. vgv8 31.01.22 14:09 Сейчас в теме
(4)
3. Таблицу значений от одного фонового задания другому можно передать через Временное хранилище. см. ПоместитьВоВременноеХранилище, ПолучитьИзВременногоХранилища. Адреса хранилищ можно хранить в отдельной таблице / регистре

И? Чё будет?
Дубли на дублях дублями погонять
11. МихаилМ 14.04.18 16:53 Сейчас в теме
(0)
секционируте таблицу - разбейте на меньшие таблицы и обрабатывайте в фз . Даже для языков высокого уровня работа с общими данными разных процессоров - плохой стиль , тк требует много ресурсов на блокировки и обращение одного процессора к памяти другого - ресурсоемкая вычислительная операция . к тому же сложная в программировании. учтите , что 1с83 плохо работает с передачей тз фз в случае выделенного сервера для фз.
мыслите множествами .
12. alex_sh2008 4 14.04.18 17:03 Сейчас в теме
(11) Таблица в памяти показывает наилучший результат, можно более гибкие операции делать.Сейчас у меня и так отдельные таблицы в каждом задании, но данные повторяются в этих заданиях, взаимодействовать между ними не получается, для синхронизации. Пока нашел путь улучшать механизм применения блокировок в конкретно взятом задании, других способов не нашел, правда в скорости тут улучшить не смогу. Пока применяю блокировки в момент удаления объекта (документ, запись регистра сведений (накопления), справочник и т.д.)
13. alex_sh2008 4 14.04.18 17:07 Сейчас в теме
(11)Насчет языков высокого уровня, есть другие подходы решения, более гибкие и взаимодействие между параллельными процессами существует, на уровне событий. Я изначально и пошел по пути именно основываясь но языки высокого уровня, но тут 1С, а не с++, пришлось перекроить весь алгоритм
14. alex_sh2008 4 14.04.18 17:09 Сейчас в теме
(11)Пробовал написать многопоточную dll, но тут наткнулся на взаимодействие 1С с моей библиотекой, что в результате снова привело в 1С.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот