Какой лучший метод инициализации или хранения словаря поиска, который будет использоваться в представлениях django
Я возрождаю старое приложение django 1.2. большинство шагов уже сделано. В моем django приложении есть представления, которые будут ссылаться на простой словарь, состоящий всего из 1300 пар ключ-значение.
В основном представление будет запрашивать словарь от нескольких тысяч до нескольких тысяч раз для значений, предоставленных пользователем. Данные словаря могут меняться два раза в год или около того.
fwiw: django обслуживается gunicorn, db=postgres, apache в качестве прокси, на сервере еще нет redis
Я придумал здесь несколько вариантов:
таблица в базе данных, которая будет запрашиваться и позволит кэшированию сделать свою работу (за счет нескольких сотен sql-запросов)
Просто определить словарь в файле настроек (уродливо, и сколько раз он считывается? Каждый раз, когда вы делаете 'from django.conf import settings'? Именно так это было сделано в предшественнике этого приложения на django 1.2 много лет назад
.читать файл с разделителями табуляции с помощью Pandas в настройках django и делать его доступным. Преимущество в том, что я могу делать некоторую магию pandas в представлении. (Насколько это эффективно, будет ли файл читаться много раз для разных пользователей или только один раз при запуске сервера?)
.предварительное заполнение кэша redis из файла как часть процесса запуска (усложняет ситуацию на стороне сервера, а мы хотим, чтобы все было просто, но зато быстро.
Перечисление элементов в файле с разделительной вкладкой и чтение его в представлении (мой наименее популярный вариант, так как он кажется довольно медленным)
Какие у вас мысли по этому поводу? Есть другие варианты?
Позвольте мне привести несколько - от простых до более сложных
- Хранить в памяти
- Основной плоский файл
- Sqlite файл
- Redis
- DB
Я бы не стал привлекать Redis для пар 1300 кВ, которые даже не так сильно мутируют
Я бы поместил файл рядом с кодом, который забирается в память при запуске, или сделал бы один sql-запрос и забрал бы всю информацию при запуске и сохранил бы ее в памяти, чтобы использовать во всем приложении