Я запустил небольшой проект с использованием python3 с flask_restplus, и мне нужно приступить к работе, поэтому я столкнулся с необходимостью переделки кода, и мне нужны некоторые предложения, чтобы сделать его более надежным, вот описание моего вопроса:
Описание
Этот прокси-сервер периодически запрашивает некоторые данные из другой службы и предоставляет данные через API REST, чтобы пользовательский интерфейс мог их использовать.Поскольку пользовательскому интерфейсу необходимо отображать данные в режиме реального времени, например, выпадающие списки, обновлять динамические поля, некоторые данные, содержащиеся в прокси-сервере, кэшируются в памяти, чтобы дать пользователю возможность работать в режиме реального времени, а не ждать 3 секунды, пока выпадающий список не отобразит XD.
Итак, для построения кеша я в основном храню некоторые данные в типе словаря глобальной переменной, поскольку все ответы, поступающие от другого сервиса, являются JSON, и это позволяет мне быстро получать / использовать некоторые данныепри необходимости.
dataCache = {} #this is where I store the cache items
def refresh_cache(): #function to refresh cache periodically
start = time.time()
#Get all service desks
get_all_project()
#Get all organizations
get_all_organizations_by_project()
#Get all customers by Desks
get_all_customers_by_project()
print("Refresh Cache Took "+str(time.time()-start)+"")
threading.Timer(app.config['CACHE_REFRESH'], refresh_cache).start()
Я знаю, что это ужасная идея, но ради черновой версии и проверки требований сработало отлично, но теперь мне нужно расти.
Последний вопрос
Какие могут быть допустимые варианты для замены этой ужасной глобальной переменной?
Мои мысли
Я думаю о том, чтобы ради скорости смонтировать sqlite3 в память и сохранить там все эти данные, так как большую часть времени мне нужносделать несколько запросов на присоединение к ¨SQL, например, «использование для циклов и операторов IF при обработке этих данных перед отправкой в пользовательский интерфейс. Например:
for rType in dataCache[companyName]['types']:
if dataCache[companyName]['projectId']==id:
bla bla bla bla
PS: Мне не нужны решения для избыточного использования / корпоративные решениятак как количество пользователей не превысит 1k раз.