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

Есть скрипт, который создает в таблице новые строки с данными
....
var NewRow = sheet.getLastRow()+1;
...
sheet.getRange("A"+NewRow).setValue(date);
....

Вызываю скрипт после регистрации пользователя через форму на сайте и передаю каждую новую регистрацию в гугл таблицу. Столкнулся с тем, что при большой частоте регистраций за короткое время скрипт не успевает обнаружить, что одна строка уже была добавлена, и вместо нескольких записей создает только одну, т.е. перезатирает крайнюю. Возможности поставить очередь вне скрипта нет.

Возможно, есть какой-то альтернативный способ записывать данные в новые строки?
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 3
stomaks
@stomaks
Разработчик Google Apps Script (stomaks.me)
Вариант 1 - Использовать локсервис (подробнее в документации google appsscript)
Вариант 2 - Сначала сохранять данные кеш скрипта, и настроить триггер который раз в минуту вытаскивает данные из кеша и кладет в таблицу.
Вариант 3 - Использовать sheet.append()
Вариант 4 - Сохранять не в таблицу а в базу данных
Вариант 5 - После каждой вставки строки setValue или до, использовать SpreadsheetApp.flush() (но этот вариант не очень хорош сам по себе, его лучше использовать в совокупности с другими)

___
stomaks.me
g-apps-script.com
Ответ написан
@rPman
Попробуй хранить количество записей (точнее первую пустую строку после таблицы) в этой же таблице. Таким образом получай строку, в которую нужно сохранять запись и увеличивай значение в одной строке (не то чтобы это было атомарно но наверняка это значительно уменьшит вероятность коллизий)
var seq=sheet.getRange("A1");
seq.setValue((newRowNum=seq.getValue())+1);

благодаря этому каждый экземпляр запущенного скрипта с самого начала получит свой номер строки

либо ищи другое место хранения этого сиквенса, в котором есть атомарная операция seq_id=seq++
Ответ написан
BasiC2k
@BasiC2k
Не рекомендую использовать GS для высоконагруженных систем. Сам с этим долго возился.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
27 янв. 2021, в 00:37
11111 руб./за проект
26 янв. 2021, в 23:30
3000 руб./за проект
26 янв. 2021, в 23:07
1000 руб./за проект