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

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

04.03.2025, 09:49. Показов 2710. Ответов 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
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,754
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
3842 / 1691 / 432
Регистрация: 14.03.2022
Сообщений: 4,310
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
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,754
04.03.2025, 11:28
Цитата Сообщение от granit201z Посмотреть сообщение
а как кстати на js создать БД, представляющую собой ассоциативный массив?
В Js не такого понятия "ассоциативный массив" . Есть объекты
Есть методы JSON.stringify и JSON.parse, которые могут переводить объекты в строку json и обратно.

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

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

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

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

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

NeDB - если нужно NoSQL...
0
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,754
04.03.2025, 11:42
Цитата Сообщение от krvsa Посмотреть сообщение
При таких количествах уже имеет смысл начать работать с некой БД.
Да, файлы будут большие и целиком их переписывать - не айс.
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3842 / 1691 / 432
Регистрация: 14.03.2022
Сообщений: 4,310
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
3842 / 1691 / 432
Регистрация: 14.03.2022
Сообщений: 4,310
04.03.2025, 11:58
Цитата Сообщение от granit201z Посмотреть сообщение
сортировать эти публикации
Так с этими "публикациями" еще и такие действия предполагаются!
Тогда это точно нужно на БД переходить.

Я-то думал что публикации просто "складываются" при получении и просто показываются некому пользователю в той последовательности, какой они пришли.
Если же предполагается более сложная работа с ними, как то:
- изменение "порядка следования"
- поиск
Это уже задачи СУБД.
0
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,754
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
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru