|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
Мне нужно аккумулировать запросы к БД от ADO.NET, т.к. они долго будут выполняться, чтобы не висела программа на них. Как умнее всего реализуется очередь запросов к БД, чтобы их не накапливалось бесконечное количество, а в отдельных потоках они в фоне выполнялись в определенном порядке? Какие объекты можно ставить в очередь, чтобы аккумулировать запросы для выполнения ExecuteNonQuery и ExecuteScalar? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 13:26 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
anc32, можно просто new List<Action>() сделать и туда добавлять всё то, что нужно выполнять. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 14:45 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
Ну или new Queue<Action>(). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 14:47 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 16:15 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
hVosttskyANAНу или new Queue<Action>(). или, лучше, ConcurrentQueue<T> )Возможно, но чтобы Action-ы "в фоне выполнялись в определенном порядке" и List<T> сгодится :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 16:22 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
skyANAВозможно, но чтобы Action-ы "в фоне выполнялись в определенном порядке" и List<T> сгодится :) С листом как раз таки всё понятно, а вот в очередь во время исполнения заданий могут поступать новые задания, иначе зачем вообще втюхивать сюда очередь? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 17:52 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
hVosttskyANAВозможно, но чтобы Action-ы "в фоне выполнялись в определенном порядке" и List<T> сгодится :) С листом как раз таки всё понятно, а вот в очередь во время исполнения заданий могут поступать новые задания, иначе зачем вообще втюхивать сюда очередь? И? Добавление: list.Add(), извлечение: list[0]. Вот тебе и очередь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 18:12 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
skyANAИ? Добавление: list.Add(), извлечение: list[0]. Вот тебе и очередь :) По голове настучать разрабам, понавыдумали, понимаешь, очереди какие-то, вот балбесы, да? Есть же List ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 18:51 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
hVosttskyANAИ? Добавление: list.Add(), извлечение: list[0]. Вот тебе и очередь :) По голове настучать разрабам, понавыдумали, понимаешь, очереди какие-то, вот балбесы, да? Есть же List Это разные структуры данных, разные характеристики производительности в разных задачах. Но для задачи ТС особой разницы нет, разве что более чётко быдет обозначено назначение объекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 19:23 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
skyANA, ээммм... авторКак умнее всего реализуется очередь запросов к БД , чтобы их не накапливалось бесконечное количество, а в отдельных потоках они в фоне выполнялись в определенном порядке нужна потокобезопасная очередь, так как из разных потоков будет происходить поступление/изъятие задач из очереди. никакой List тут никаким боком не упал, если ты конечно не собираешься заморочиться, чтобы сделать поверх List-а, свою потокобезопасную очередь. конечно, я понимаю, что велосепедостраение никто ещё не отменял. но всё же ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2015, 22:02 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
hVosttskyANA, ээммм... авторКак умнее всего реализуется очередь запросов к БД , чтобы их не накапливалось бесконечное количество, а в отдельных потоках они в фоне выполнялись в определенном порядке нужна потокобезопасная очередь, так как из разных потоков будет происходить поступление/изъятие задач из очереди. никакой List тут никаким боком не упал, если ты конечно не собираешься заморочиться, чтобы сделать поверх List-а, свою потокобезопасную очередь. конечно, я понимаю, что велосепедостраение никто ещё не отменял. но всё же Ты несколько иначе понял постановку вопроса. Задачи вроде как выполнять планируется в отдельных потоках, а не "из разных потоков будет происходить поступление". А учитывая то, что "они в фоне выполнялись в определенном порядке", предполагаю, что отдельные потоки тут и не нужны вовсе. Банальный lock обеспечит "поверх List-а, свою потокобезопасную очередь" в данном контексте. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2015, 01:25 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
skyANAТы несколько иначе понял постановку вопроса. Я ж цитату привёл и всё выделил жирненьким. Как это иначе понять-то можно? skyANAЗадачи вроде как выполнять планируется в отдельных потоках, а не "из разных потоков будет происходить поступление". Т.е. ты считаешь, что в определённое время сформировался пакет задач, который отдали на выполнение в синхронном режиме, так? Значит будет 1 поток, выполняющий задачи 1 за другим, или запускающий таски и ожидающий их выполнение. Но если речь идёт о накапливаемости , значит в определённые моменты, кто-то другой (поток) будет подсовывать новые задачи в очередь. Если ты залочишь List, то подсунуть задачу не получится, и другой поток провиснет, по наитупейшей причине. Зачем ему ждать "окошка", чтобы сунуть в List свои задачи? При использовании потокобезопасной очереди такие проблемы исключены. В очередь можно сувать новые задачи откуда угодно и как угодно, не важно синхронно они при этом обрабатываются или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2015, 05:02 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
hVostt, да все там получится и с List, и с ConcurrentQueue, не драматизируй :) Кстати надо бы версию фреймворка у ТС уточнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2015, 09:39 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
skyANAhVostt, да все там получится и с List, и с ConcurrentQueue, не драматизируй :) Да и без List всё получится, даже без C# тоже, да и без компа в принципе, гоу жареть шашлеки и всё получится ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2015, 09:41 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
anc32, и уточните насчет "в определенном порядке". Это в каком? Не в порядке поступления? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2015, 09:44 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
skyANAanc32, и уточните насчет "в определенном порядке". Это в каком? Не в порядке поступления? да тут нет никого кроме нас ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2015, 09:48 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
anc32, судя по аватарке с Чаком в профиле, ты есть и на форумах msdn и задал там похожий вопрос. Только там почему-то подробней расписываешь, а тут как-то скромно. А лучше наоборот, на этом форуме по БД спрашивать. В частности, про балансировку нагрузки, индексы, уровни изоляции. Только раздел форума правильно выбери: MS Sql Server. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2015, 16:03 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2015, 12:17 |
|
Как сделать очередь обращений к БД?
|
|||
---|---|---|---|
#18+
Благодарю всех за Ваши советы. Фрейворк последний. В определенном порядке имеется в виду, что будет возможность, к примеру если поступают задания на выполнение BULK INSERT 1000 записей, запустить эти BULK INSERT один за другим. Не уверен ,получится ли это реализовать, но в идеале хотелось бы гарантировать перед выполнением ExecuteScalar, что все предшествующие INSERT выполнились. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2015, 21:30 |
|
|
start [/forum/topic.php?fid=17&fpage=13&tid=1349496]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
99ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 212ms |
0 / 0 |