274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
||||||
Глобальные переменные в памяти26.02.2018, 18:18. Показов 5418. Ответов 3
Метки нет Все метки)
(
Добрый день, подскажите плииз такое вообще возможно? и имеет ли смысл!
Есть одно число (спец-счетчик). Хранится в одной ячейке одной из таблиц (выделенной "для хранения констант/настроек программы") Есть тригер на изменение нескольких таблиц с общей функцией. В этой функции в поле изменяемой таблицы вставляется этот "счетчик". Записей на изменение (вызов триггера) планируется ОЧЕНЬ много и хочу хоть как-то уменьшить нагрузку убрав одно из обращений к таблице. Это число/счетчик меняется РЕДКО - раз в несколько дней. Задумал создать одну глобальную переменную "в памяти" и хранить значение там. Такое возможно? Привык (в быстрых языках) что часто используемая переменная хранится/кешируется в глобальной переменной, а не в одной из таблиц с хитрым поиском... Конечная задача - максимально экономить процессор и количество обращений к HDD (не самого быстрого хостинга) на высоких нагрузках! (за раз может быть изменено несколько тысяч записей - не логично каждый раз триггером пере-получать запись из "констант") Начал вычитывать про
0
|
26.02.2018, 18:18 | |
Ответы с готовыми решениями:
3
Выделение памяти под глобальные переменные Функция не видит выделенной памяти под глобальные переменные Глобальные и статические глобальные переменные |
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
||||||
28.02.2018, 15:31 | ||||||
Параметры, создаваемые через SET, имеют недостаток. Время жизни ограничено сессией. Потом они уничтожаются.
Можно извратиться через ALTER DATABASE, но полезут проблемы с правами доступа. В общем я бы не рекомендовал использовать параметры. Самый верный способ, конечно, использование таблицы. Прочитать серверу это значение практически ничего не будет стоить. Тем более если будут частые обращения (на чтение) к этом счетчику, то наверняка эти часто используемые страницы данных будут закешированы в оперативной памяти и не будет никакой частой нагрузки на диск. Для системы это будет рядовая операция - достать значение из памяти. В качестве альтернативы можете еще рассмотреть CREATE SEQUENCE. что нибудь типа
Для работы с последовательностями имеются функции currval и nextval. Есть особенности их применения. В частности currval просто так недоступна в данной сессии, пока прежде не будет вызвана nextval. В принципе это обходится запросов select last_value from global_counter, но все же возможны ситуации, когда возникают условия гонок, особенно когда много запросов летит из множества различных сессий.
1
|
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
||||
28.02.2018, 21:17 [ТС] | ||||
у меня не просто "счетчик"! Это просто "переменная"/значение, задаваемая ВРУЧНУЮ раз в период (от нескольких раз в день, до нескольких раз в месяц) и часто используемая в каждом триггере. Обычно увеличивается на 1, но (теоретически) может "перескочить" число.
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
||||||||||||||||||||||
01.03.2018, 02:05 | ||||||||||||||||||||||
Вероятность, что данные, выбранные секунду назад, потребуются еще через секунду, гораздо выше, чем не потребуются (самый простой пример - частые обращения к каким-нибудь справочникам в информационных системах, сколько таких запросов?? вопрос риторический). Примерно аналогичной стратегии придерживается и операционная система при управлении страничным обменом. Достать данные из памяти, гораздо быстрее по времени, чем достать их с диска. Поэтому пусть они пока полежат в памяти (пока свободное пространство позволяет), вдруг потребуются. А убедиться очень просто. Генерим примерно 100Мбайт "чистых" данных
Перезапускаем PG (верочно сбрасываем все буфера, память и т.д.) и делаем запрос
Выполняем еще раз запрос, еще, еще..... Видим строчки (примерно)
поэтому PG все же предпочтет хранить часть данных в памяти, постепенно накапливая статистику по таблице, насколько часто она используется в запросах. Об ускорении в этом простом запросе не приходится. Здесь скорее больше времени сравнение строк займет, чтобы найти из 1000000 строк, те, которые начинаются на 'a'. Такой приведенный примитивный анализ, а также последующие танцы с бубном для гораздо более сложного анализа, проводятся тогда, когда есть предмет вопроса - база где-то тормозит. Для вашего простого хранения параметров - это ну уж точно не потребуется. Скорее где-то в другом месте вылезет проблема, чем при чтение одной небольшой таблички, которая умещается в пару страниц данных. Поэтому положите ваши параметры в отдельную табличку и спокойно используйте без премудростей.
1
|
01.03.2018, 02:05 | ||||||
Помогаю со студенческими работами здесь
4
Глобальные переменные Глобальные переменные Глобальные переменные Глобальные переменные Глобальные переменные в qt Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
|
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
|
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
|
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
|
Микросервис на Python с FastAPI и Docker
ArchitectMsa 23.04.2025
В эпоху облачных вычислений и растущей сложности программных продуктов классическая монолитная архитектура всё чаще уступает место новым подходам. Микросервисная архитектура становится фаворитом. . .
|
Создаем веб-приложение на Vue.js и Laravel
Reangularity 23.04.2025
Выбор правильного технологического стека определяет успех веб-проекта. Laravel и Vue. js формируют отличную комбинацию для создания современных приложений. Laravel — это PHP-фреймворк с элегантным. . .
|
Максимальная производительность C#: Span<T> и Memory<T>
stackOverflow 22.04.2025
Мир высоконагруженных приложений безжалостен к неэффективному коду. Каждая миллисекунда на счету, каждый выделенный байт памяти может стать причиной падения производительности. Разработчики на C#. . .
|
JWT аутентификация в Java
Javaican 21.04.2025
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация. . .
|
Спринты Agile: Планирование, выполнение, ревью и ретроспектива
EggHead 21.04.2025
Спринты — сердцевина Agile-методологии, позволяющая командам создавать работающий продукт итерационно, с постоянной проверкой гипотез и адаптацией к изменениям. В основе концепции спринтов лежит. . .
|
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров
Programma_Boinc 21.04.2025
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров.
3 марта 2025 года, в результате обобщенного поиска простых чисел Ферма в PrimeGrid был найден. . .
|