Равномерное распределение ресурсов в многопотоке

Поддержка
  • Всем привет!

    Стоит задача равномерного перебора строк из БД в многопоточном скрипте в цикле (пусть будет 20 потоков).
    Задача осложняется двумя моментами:

    1. Половина потоков должна работать по всем строкам из БД, а вторая половина - только по строкам с определенным признаком.
    2. БД периодически обновляется.

    Проблемы:

    1. Сначала сделал через один ресурс, в который берется вся БД. А уже внутри цикла в скрипте просто пропускается (continue) часть строк по THREAD_INDEX < 10. Проблема: пропуск строки тоже считается за использование ресурса, итого проверки для THREAD_INDEX > 10 идут неравномерно.
    2. Хотел сделать 2 отдельных ресурса: вся БД и часть БД, чтобы первая и вторая половина потоков работали по разным ресурсам. Проблема: через интерфейс ресурсов нельзя выставить фильтры для строк из таблицы БД, только брать таблицу целиком. Тогда решил делать ресурсы через OnApplicationStart (чтобы по фильтру из БД его создать), но тогда ресурс не будет обновляться. Только один раз в начале скрипта.

    Готового решения не прошу, просто накиньте пожалуйста мысли, в сторону чего можно смотреть для решения задачи.. Уже не знаю, как сделать :(

  • Я не очень хорошо понимаю ваше требование, но я вижу, что вы хотите фильтровать ресурсы по определенному условию.
    Итак, у меня есть предложение.
    В базе данных создайте еще один столбец.
    Какие данные работают только с определенными свойствами, укажите имя в этом поле.
    Таким образом, вы можете использовать «Получить Записи По Критерию» и использовать «Добавить фильтр», чтобы отфильтровать соответствующие условия.
    s1.png s2.png

  • А вы через какой модуль пробуете? Sql? База какая?

  • @BAS-Viet-Nam Я так и сделал в варианте №2. Два ресурса, один из полной БД, другой из БД по фильтру. Все это в OnApplicationStart. Но в таком случае ресурсы не обновляются.

  • @doupiu "Но в таком случае ресурсы не обновляются."
    Какое обновление?
    А зачем его ставить в "OnApplicationStart"?

  • @Bigma встроенная база BAS-а

  • @doupiu Проблема: через интерфейс ресурсов нельзя выставить фильтры для строк из таблицы БД, только брать таблицу целиком.
    У меня никогда не было случая, чтобы значение нельзя было отфильтровать.

  • @BAS-Viet-Nam база данных, из которой формируется ресурс, обновляется отдельно. Ресурс соответственно тоже должен обновляться вслед за БД.

  • @doupiu Вам не нужно создавать ресурсы. Просто создайте базу данных и работайте с ней.
    Весь мой проект работает с базой данных, но я не создаю ресурсы для этой базы данных.

  • @BAS-Viet-Nam оно так и было до недавного времени. Я просто брал строки из БД, перемешивал их внутри каждого потока и работал по ним. Но перемешивание дает плохую равномерность. Поэтому я хочу задействовать систему ресурсов с кол-вом одновременных использований =1, что даст равномерный многопоточный перебор всех строк из БД. Вот)

  • @doupiu Извините, я не понимаю, что делает ваш проект, поэтому я не могу вам помочь.
    Но у каждой проблемы есть решение.

  • 0 Votes
    11 Posts
    1026 Views
  • 0 Votes
    19 Posts
    1472 Views
  • CORS в БАСе

    Поддержка
    0 Votes
    2 Posts
    486 Views
  • 0 Votes
    35 Posts
    3494 Views
  • 0 Votes
    2 Posts
    1146 Views