Работа с аккаунтам в таблице

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Понадобилось вести список аккаунтов и их данных в Excel таблице. Интересуют многопоточные решения реализации последовательной работы с аккаунтами из таблицы. Поделитесь мыслями, наработками кто имеет опыт.

Что то я вообще растерялся, не могу придумать достойную логику получения аккаунтов из таблицы в поток.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
взять строку, записать строку?)
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 720
Благодарностей
1 377
Баллы
113
логика примерно такая
Код:
lock(SyncObjects.TableSyncer){
   
    // берем первую строку с удалением и раскидываем значения по переменным
    var row = project.Tables["mytable"].GetRow(0).ToList();
    project.Tables["mytable"].DeleteRow(0);
    project.Variables["login"].Value = row[0];
    project.Variables["password"].Value = row[1];   
}


// тут что-то делаем с полученными из таблицы данными

// возвращаем строку в конец списка
lock(SyncObjects.TableSyncer){
    project.Tables["mytable"].AddRow(project.Variables["login"].Value+"\t"+project.Variables["password"].Value);
}
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Мне кажется вести таблицу в многопотоке это не лучшая идея. Капризные эти таблицы. Может лучше текстовый файл привязать как таблицу и работать с ним?
По поводу локов в многопотоке, если брать с удалением можно не лочить. А вот запись лучше залочить.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
взять строку, записать строку?)
Да вот как бы менять позицию строк в таблице не хочется, они пронумерованы т.е. ID привязывается к аккаунту и далее уже используется в работе шаблона.
логика примерно такая
Да, спасибо, но вот не совсем то.
Мне кажется вести таблицу в многопотоке это не лучшая идея.
Ужасно все да с ними?
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 720
Благодарностей
1 377
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
логика примерно такая
Код:
lock(SyncObjects.TableSyncer){

    // берем первую строку с удалением и раскидываем значения по переменным
    var row = project.Tables["mytable"].GetRow(0).ToList();
    project.Tables["mytable"].DeleteRow(0);
    project.Variables["login"].Value = row[0];
    project.Variables["password"].Value = row[1];
}


// тут что-то делаем с полученными из таблицы данными

// возвращаем строку в конец списка
lock(SyncObjects.TableSyncer){
    project.Tables["mytable"].AddRow(project.Variables["login"].Value+"\t"+project.Variables["password"].Value);
}
По моему подойдет данный снипет для задуманного. Один момент по C# для этого сниппета

1. Взять строку без удаления и расскидать значение по переменным.
2. Как установить значение (увеличить на 1) в глобальную переменную.
3. Как получить значение из глобальной переменной в переменную.

Решил остановиться на глобальных переменных. Без С# не обойтись, надо лочить процесс получения данных из таблицы в многопотоке.
 
Последнее редактирование:

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 720
Благодарностей
1 377
Баллы
113
дак вот эта вот конструкция и лочит таблицу для работы в многопотоке
Код:
lock(SyncObjects.TableSyncer){
....
}
внутри этой конструкции может работать только 1 поток, остальные будут ждать пока он отработает
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
дак вот эта вот конструкция и лочит таблицу для работы в многопотоке
Код:
lock(SyncObjects.TableSyncer){
....
}
внутри этой конструкции может работать только 1 поток, остальные будут ждать пока он отработает
Т.е. можно обойтись без счетчика в глобальных переменных? Я пока беру строку по номеру что храниться в лобальной переменной что бы аккаунты работали поочередно.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 720
Благодарностей
1 377
Баллы
113
Т.е. можно обойтись без счетчика в глобальных переменных?
Да, можно
В посте #3 я как раз и привел пример такой - берется первая строка с удалением, а после работы с полученными данными она кладется в конец таблицы. И так каждый поток берет сверху и кладет в конец.
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Все работает, всем спасибо! Одно неудобство, если прерывается работа шаблона, то теряются записи из таблицы.
 

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 223
Баллы
113
Все работает, всем спасибо! Одно неудобство, если прерывается работа шаблона, то теряются записи из таблицы.
Гораздо удобнее маркировать строки которые находятся в работе, не удаляя их из файла или базы. И от потери данных вы застрахованы.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
И еще один момент. Почему то не берет строку если в ней имеются в конце пустые две ячейки, без значений. Если в них что то вставить. то все в порядке.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Гораздо удобнее маркировать строки которые находятся в работе, не удаляя их из файла или базы. И от потери данных вы застрахованы.
Да, я тоже так думал, но не смог придумать решение. Есть пример?
 
Последнее редактирование:

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
Одно неудобство, если прерывается работа шаблона, то теряются записи из таблицы
Гораздо удобнее маркировать строки которые находятся в работе
не соглашусь, маркировка, это лишнее действие и лишняя проверка на это

вот моя логика и работа с таблицами, ваще таблицы это нереально круто и удобно и самое главное просто.

1. берем строку с удалением из таблицы
2. сразу же записываем всю эту же строку обратно в таблицу

на выходе мы имеем полную базу и данные в зенке

почему это удобно?
1. база никак не потеряется при любой ошибки
2. нет дополнительных действий на маркер и проверку маркера (а это увеличивает логику и время работы и нагрузку на хард, пусть и не значительно но все же, а если у тебя эксель на 50мб+ то уже ощутимо)
3. ты всегда можешь удалить ненужную тебе строку по ее содержимому. (например логин, он всегда уникальный и можно удалить его из любой части файла. очень удобно)
 
  • Спасибо
Реакции: TIIGR, Gulid и one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Да, но тут есть один момент. В процессе работы с аккаунтом как его взяли из базы, мы получаем значения, которые в конце работы шаблона надо записать в базу к аккаунту с которым мы только что работали. Для получения исходных данных твой метод вполне приемлем.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
а в конце можно метку ставить, также удобно как если и удалить надо.
я так уже года 2 работаю, ваще удобняк :-)
 
  • Спасибо
Реакции: TIIGR и Gulid

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Не совсем понятен тогда смысл этого:
1. берем строку с удалением из таблицы
2. сразу же записываем всю эту же строку обратно в таблицу
Если в конце работы шаблона, надо искать нужную строку в базе (таблице) что бы занести в нее данные полученные в ходе работы шаблона.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
Не совсем понятен тогда смысл этого
у тебя на серваке отключили свет, пропал инет, произошел форсмажор, любая ошибка шаблона, неправильный ответ гет или пост запроса, любая ошибка и всем твоим данным кабзда...
А так автоматом сохранил и не думаешь и голова не болит
я все равно делаю бекапы, и выхожу правильно по ошибке, но акки стоят денег и терять нельзя.. Поэтому делай что говорю, за долгое время много что перепробовал, эта схема самая рабочая )
 
  • Спасибо
Реакции: TIIGR, Gulid и one

esouldy

Client
Регистрация
28.02.2016
Сообщения
185
Благодарностей
92
Баллы
28
вставлю свои пять копеек.
я б рекомендовал вместо таблиц использовать mysql. вопрос локов на форуме уже разобран (если что, могу дернуть из проекта). из плюсов, в сравнении с таблицами: прозводительность, легко масштабируется, базу можно держать на внешнем сервере, если, например, несколько серверов с зенкой работают. ну и плюсом: возможности индексирования, проверки уникальности, простой язык запросов
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
я б рекомендовал вместо таблиц использовать mysql. вопрос локов на форуме уже разобран
да, но все таки если бд реально большая, я пытался переписать все на sql, тут я соглашусь, реально удобнее, выборки можно делать на много лучше и качественнее, но запарился я лочить запросы, и продумывать логику работы шаба, плюс пересохранение в бд приводило к косякам (я так и не понял почему)
Я просто огромную базу разделил на куски и создал доп конфик который эти куски пересобирает по условиям, мне так проще оказалось запилить... Но правда наверно это потому что проект уже работал и реально огромный и переписывать было просто влом :-)

Но если бд небольшая, до 10-30мб эксель лучшее решение, либо писать сразу под sql с нуля
 
  • Спасибо
Реакции: TIIGR и Gulid

esouldy

Client
Регистрация
28.02.2016
Сообщения
185
Благодарностей
92
Баллы
28
да, но все таки если бд реально большая, я пытался переписать все на sql, тут я соглашусь, реально удобнее, выборки можно делать на много лучше и качественнее, но запарился я лочить запросы, и продумывать логику работы шаба, плюс пересохранение в бд приводило к косякам (я так и не понял почему)
Я просто огромную базу разделил на куски и создал доп конфик который эти куски пересобирает по условиям, мне так проще оказалось запилить... Но правда наверно это потому что проект уже работал и реально огромный и переписывать было просто влом :-)

Но если бд небольшая, до 10-30мб эксель лучшее решение, либо писать сразу под sql с нуля
а так может быть конфиг кривой, железо слабое или лок неправильно (логически) сделан. база, я так понимаю, не меньше 1гб была?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
не меньше 1гб была?
почти 5
да, я думаю что-то одно, просто при работе выскакивало много нюансов, которые надо было разбирать и тратить время, наверно это и убило все желание, ладно, не будем про это, все таки вопрос про таблицы экселя))
 
  • Спасибо
Реакции: TIIGR, Gulid и esouldy

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
у тебя на серваке отключили свет, пропал инет, произошел форсмажор, любая ошибка шаблона, неправильный ответ гет или пост запроса, любая ошибка и всем твоим данным кабзда...
А так автоматом сохранил и не думаешь и голова не болит
Да, но тогда дополнительные телодвижения возникают с записью данных в нужную строку базы.
Поэтому делай что говорю, за долгое время много что перепробовал, эта схема самая рабочая )
Да я б с радостью, но пока еще не до конца понял мысль твою решения. Распиши пошагово плс, попробую реализовать.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
я б рекомендовал вместо таблиц использовать mysql.
Нету такой возможности, для клиента пишется шаблон. Свои шаблоны я всегда и уже давно использую в связке с MySQL.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
Да, но тогда дополнительные телодвижения возникаю с записбю данных в нужную строку базы.
нет, просто делаешь вызов нужной строки по содержанию, она автоматом вызывается не важно где находится, ну только надо иметь для нее уникальный текст
Да я б с радостью, но пока еще не до конца понял решени. Распиши пошагово плс, попробую реализовать.
вот моя логика

1. берем инфу
2. записываем обратно
3. проверяем на условие
4. если ДА, удаляем то что записали ранее
5. добавляем заново с новым условием


http://recordit.co/r9KerBbBXA

добавил вторую версию - проверка вначале на статус.
 

Вложения

Последнее редактирование:

mux76

Client
Регистрация
13.12.2010
Сообщения
259
Благодарностей
119
Баллы
43
Всем привет.
1 беру кол-во строк в таблице.
2 рандомно или ещё как определяю нужную строку
3 проверяю стоит ли маркер "занятости" в данной строке
4 если маркера нет то ставлю
5 беру данные и по ним работатаю
6 после окончании работы маркер удаляю
7 часто на end ставлю удаление маркера.
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
backoff, благодарю! Буду пробовать интегрировать в свои шаблон.

Еще просьба. Покажите пример такой же как выше дал WebBot, но только для работы со списком. Лок, получение строки с удалением, запись в конец.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
так а зачем лок со списком? просто привяжи список к файлу и бери с удалением, вот и весь лок... я с локами так себе, тож не очень понимаю их )
 
  • Спасибо
Реакции: TIIGR и Gulid

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)