Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
3 / 3 / 0
Регистрация: 12.05.2016
Сообщений: 62

Как правильно хранить глобальную переменную

04.03.2025, 09:49. Показов 2737. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Такая дилемма - есть телеграмм бот, при его запуске я объявляю пустой ассоциативный массив. В процессе работы массив наполняется данными. Но так как бот в стадии активной разработки, я его постоянно перезапускаю. Соответственно с каждым перезапуском все данные , накопленные в массиве теряются. Есть ли способ объявить массив вне файла с текстом бота, потом с помощью какого-нибудь include (если такое есть) включать в бот уже наполненный (ну или еще ненаполненный) массив. Т.е. как сделать, чтобы переменная жила отдельно от программы ее использующей?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.03.2025, 09:49
Ответы с готовыми решениями:

Как правильно объявить глобальную переменную?
Суть задачи вывести знак зодиака и стихию в зависимости от даты рождения. Глобальная переменная получается undefined и условия изменения ее...

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

Передать переменную из обработчика событий как глобальную
Объявляю переменную: var rowobj; , затем читаю файл excel и пытаюсь прочитать эту переменную вне обработчика, но не получается. Как в итоге...

47
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
04.03.2025, 09:50
бот жеж на серваке критутиццо? вот там и храни
0
3 / 3 / 0
Регистрация: 12.05.2016
Сообщений: 62
04.03.2025, 09:58  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
бот жеж на серваке критутиццо? вот там и храни
ну как на серваке... на ноуте у меня. но вопрос не совсем про это (если я правильно себя понимаю). т.е. не где физически хранить переменную, а как правильно ее хранить. т.е. переменная представляет из себя не просто число или строку, а структуру данных. Каждый раз записывать ее в текстовый файл, потом из файла вытаскивать эту строку и преобразовывать опять в структуру - такое себе.
тем более бот (особенно в моем исполнении) в любой момент может очень неожиданно упасть и все, что можно было бы записать при его корректном завершении будет утеряно. А записывать в текст каждый раз при добавлении в массив или удалении из него какой то отдельной пары "ключ-значение" - это уже (такое себе)^2
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
04.03.2025, 10:08
для этого люди придумали базы данных

Добавлено через 45 секунд
если совсем заморочится - брокеры сообщений
0
3 / 3 / 0
Регистрация: 12.05.2016
Сообщений: 62
04.03.2025, 10:21  [ТС]
А есть ли более простые методы? а то это как для доставки из магазина до дома использовать ракету и всю ракетостроительную отрасль, когда можно просто на велосипеде довезти
0
 Аватар для voraa
1288 / 1261 / 187
Регистрация: 21.01.2024
Сообщений: 5,797
04.03.2025, 10:25
Если программа падает/завершается, то в памяти ничего не остается. Поэтому и хранят такие данные во внешних хранилищах - просто файлах или БД, если данных много.
Что такого просто записывать и считывать файл с json?
1
3 / 3 / 0
Регистрация: 12.05.2016
Сообщений: 62
04.03.2025, 10:37  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Что такого просто записывать и считывать файл с json?
не знаю. я мало с json взаимодействовал. но придется, конечно, если более простых вариантов не найду до обеда

Добавлено через 3 минуты
а как кстати на js создать БД, представляющую собой ассоциативный массив?
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
04.03.2025, 10:41
Цитата Сообщение от granit201z Посмотреть сообщение
а как кстати на js создать БД, представляющую собой ассоциативный массив?
чудес не бывает. реальный плоский json

Добавлено через 1 минуту
для ноды можно поискать библу для локальной бд

Добавлено через 45 секунд
https://www.npmjs.com/package/db-local
1
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1696 / 431
Регистрация: 14.03.2022
Сообщений: 4,336
04.03.2025, 10:47
Лучший ответ Сообщение было отмечено pincet как решение

Решение

Цитата Сообщение от granit201z Посмотреть сообщение
если более простых вариантов не найду
Для хорошего совета нужно знать что ты собрался хранить...

Самым лучшим вариантом, как писал камрад voraa - является БД.
Возможно простенькая и мало затратная по ресурсам, та же NeDB...
https://rukovodstvo.net/posts/id_1346/

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

Зная что именно тебе нужно - можно предложить какие-то приемлемые варианты...

Добавлено через 3 минуты
granit201z, например та же Firebase предоставляет бесплатный вариант небольшого хранилища данных...
https://firebase.google.com
1
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
04.03.2025, 11:05
Цитата Сообщение от krvsa Посмотреть сообщение
Если даже такое сложно - остаются файлы, в которые будут записываться данные.
Вопрос только в их количестве и внутреннем формате хранения самих данных.
krvsa,как только granit201z, упрется в конкурентный доступ к данным - будет думать дальше))
0
3 / 3 / 0
Регистрация: 12.05.2016
Сообщений: 62
04.03.2025, 11:12  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Зная что именно тебе нужно - можно предложить какие-то приемлемые варианты...
Есть канал, в который с периодичностью раз в 2 секунды падают публикации. Эти публикации из разных городов. И пользователю нет необходимости смотреть их все. Для этого в канале сидит бот. пользователь пишет ему, например, "таганрог" и бот начинает пересылать ему публикации из канала, касающиеся только Таганрога. Но ему через минуту уже может стать нужным не Таганрог, а, скажем, Волгоград. Он пишет боту "волгоград" и тот сначала удаляет его ID из массива со структурой (город - список ID для этого города), и следом записывает в этот же массив, но для другого города. Пользователей ожидается около 10 000. А эта структура динамичная. Они постоянно будут менять города, покидать систему, приходить новые. Т.е. если бот нечаянно упал, или даже пусть не нечаянно, а пришлось его перезапустить для каких то работ в нем. Эта структура не должна потеряться... И все таки, проще, наверное хранить структуру (ID-город), а на ее основе уже строить при запуске бота (город-список ID)?
...
ну и при каждом изменении города i-м пользователем вести "чтения-записи" файла, при условии что количество пользователей достигнет расчетного значения - боюсь упадет не только бот, но и мой ноут)
0
 Аватар для voraa
1288 / 1261 / 187
Регистрация: 21.01.2024
Сообщений: 5,797
04.03.2025, 11:28
Цитата Сообщение от granit201z Посмотреть сообщение
а как кстати на js создать БД, представляющую собой ассоциативный массив?
В Js не такого понятия "ассоциативный массив" . Есть объекты
Есть методы JSON.stringify и JSON.parse, которые могут переводить объекты в строку json и обратно.

Добавлено через 1 минуту
Цитата Сообщение от granit201z Посмотреть сообщение
ну и при каждом изменении города i-м пользователем вести "чтения-записи" файла, при условии что количество пользователей достигнет расчетного значения - боюсь упадет не только бот, но и мой ноут)
Тогда обычная БД.
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1696 / 431
Регистрация: 14.03.2022
Сообщений: 4,336
04.03.2025, 11:31
Цитата Сообщение от pincet Посмотреть сообщение
упрется в конкурентный доступ к данным
Все зависит от задач, которые он решает...
0
 Аватар для voraa
1288 / 1261 / 187
Регистрация: 21.01.2024
Сообщений: 5,797
04.03.2025, 11:38
Цитата Сообщение от krvsa Посмотреть сообщение
Возможно простенькая и мало затратная по ресурсам, та же NeDB...
Цитата Сообщение от krvsa Посмотреть сообщение
например та же Firebase предоставляет бесплатный вариант небольшого хранилища данных...
Можно и SQLite Она говорят попроще и поменьше ресурсов жрет. (Хотя точно не знаю, я с ней не работал)
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1696 / 431
Регистрация: 14.03.2022
Сообщений: 4,336
04.03.2025, 11:41
Если использовать файлы...

Цитата Сообщение от granit201z Посмотреть сообщение
Есть канал, в который с периодичностью раз в 2 секунды падают публикации. Эти публикации из разных городов.
Для каждого города делать свой файл и в него дописывать эти "публикации"...

Саму структуру пользователь - город - можно хранить в виде объекта в json-файле. Перезаписывать его каждый раз при появлении нового пользователя или смены города пользователем...

Цитата Сообщение от granit201z Посмотреть сообщение
Пользователей ожидается около 10 000
При таких количествах уже имеет смысл начать работать с некой БД.

Добавлено через 2 минуты
Цитата Сообщение от voraa Посмотреть сообщение
Можно и SQLite ...
Это если тяготеет к SQL-доступу...

NeDB - если нужно NoSQL...
0
 Аватар для voraa
1288 / 1261 / 187
Регистрация: 21.01.2024
Сообщений: 5,797
04.03.2025, 11:42
Цитата Сообщение от krvsa Посмотреть сообщение
При таких количествах уже имеет смысл начать работать с некой БД.
Да, файлы будут большие и целиком их переписывать - не айс.
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1696 / 431
Регистрация: 14.03.2022
Сообщений: 4,336
04.03.2025, 11:45
granit201z, вместо "рассказов" о данных - лучше показывать их структуру.
Для ее описания можно использовать довольно удобный ресурс https://sql.toad.cz/?
0
3 / 3 / 0
Регистрация: 12.05.2016
Сообщений: 62
04.03.2025, 11:53  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Для каждого города делать свой файл и в него дописывать эти "публикации"...
изначально я думал завести на каждый город канал и сортировать эти публикации. это было бы самым простым решением. захотел сменить город - перешел на нужный канал. но, насколько я понял для 100 городов такое сделать нельзя, т.к. телеграмм ограничивает количество каналов. поэтому сейчас все публикации падают в один канал, а уже по пользователям их маршрутизировать - задача бота. но меня слово "файл" смущает. возможно, вы имеете ввиду что-то другое. сохранять публикации в файл нет смысла. они уже через час уже теряют свою актуальность
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1696 / 431
Регистрация: 14.03.2022
Сообщений: 4,336
04.03.2025, 11:58
Цитата Сообщение от granit201z Посмотреть сообщение
сортировать эти публикации
Так с этими "публикациями" еще и такие действия предполагаются!
Тогда это точно нужно на БД переходить.

Я-то думал что публикации просто "складываются" при получении и просто показываются некому пользователю в той последовательности, какой они пришли.
Если же предполагается более сложная работа с ними, как то:
- изменение "порядка следования"
- поиск
Это уже задачи СУБД.
0
 Аватар для voraa
1288 / 1261 / 187
Регистрация: 21.01.2024
Сообщений: 5,797
04.03.2025, 11:58
Цитата Сообщение от granit201z Посмотреть сообщение
сохранять публикации в файл нет смысла. они уже через час уже теряют свою актуальность
Если не сохранять и бот падает, то теряется все. Если вычищать устаревшие публикации, то перезаписывать файлы целиком.
Не могу предположить, насколько большие файлы, не зная, что в них - сами публикации или только url, сколько их (актуальных и старых)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2025, 11:58
Помогаю со студенческими работами здесь

Завести глобальную переменную в JS
Подскажите, пожалуйста! Как можно в документе с фреймами в JavaScript создать переменную (например, массив объектов), которая была бы...

Обработчик потока не видит глобальную переменную
index.js: ... global.param = {} myWorker(); ...

В теле функции изменить глобальную переменную
Добрый день! Имеется файл main.js в котором объявлена глобальная (?) переменная data, и функция mainLoad c вложенной функцией от...

Получение данных с промиса в глобальную переменную
Нужна помощь . Не могу засетить данные в глобальную переменную с then . Оборачивание parse в функцию не помогает . let result = '';...

Обработчик события не видит глобальную переменную
Здравствуйте, кучу времени потратил, чтобы найти в чем проблема, но не нашел решения. Подскажите, пожалуйста, почему-то button.onmouseup...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru