24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Предположим в роут вебсервера (fastapi) влетает огромный json. Последующие апи запросы (их много, сотни тысячи) модифицируют эти данные. Пробовал сохранять всё в базу, запросы очень частые, получается медленно.
Нужно как-то держать эти данные в памяти, чтобы можно было с ними работать через апи. Сохранность данных не важна, нужно доставать из памяти и фильтровать по разным критериям. Пробовал редис, но там хрен отфильтруешь, так как key/value. Куда копать ?
Мне нужно сохранять состояния pytest тестов в базу. Тесты очень быстрые. Каждое изменение состояния теста - это запись. Вот я и думаю, будет ли быстрее не сохранять сразу, а держать в памяти. Сохранять уже потом, после того как джоба отработает. Запись в файлы не вариант.
Насчет скорости. К примеру запускаем 1000 тестов - без записи отработают за доли секунды. С записью выходит уже около 10 секунд. Нужно быстро.
>>2184625 наивная постановка вопроса. зачем обновлять данные, которые будут сразу же перезаписаны? если тебе нужны логи тестов - храни логи тестов. в базу вставляй большим оператором insert. кстати, pandas это тоже прекрасно делает.
Ты в стремлении сформулировать задачу как математик потерял все возможности рассуждать об оптимизации. что вообще обычно делают в таких случаях тестировщики и девопсы? Изучи сначала их опыт
Не знаю как там сейчас в ваших питухонах, но для го есть много in-memory хранилищ - и kv и с индексами на деревьях и на битмапах, и, о боже с полноценным ACID https://github.com/avelino/awesome-go#database
>>2184580 (OP) 1. Сохраняешь в БД. Можно реляционку вроде Постгреса, а можно в Монг (жсоны ведь) 2. Держишь жсон прямо в памяти Питона, это и есть твой кеш. Когда идут запросы на обновление, обновляешь данные в кеше 3. Раз в минуту записываешь данные из кеша в БД (неблокирующим образом разумеется)
>>2184611 Расскажи подробнее, что значит "1000 тестов" и каким образом они получают/обновляют данные. Возможно ты локально запускаешь всё и поэтому комп не вывозит одновременно и базу и приложение и тесты. Как тесты обновляют данные? Они их сначала получают полностью, а потом засылают полностью обновлённый json? Сколько уникальных json-записей? 1000 запросов каждый пишет по 1 уникальному файлу или они все долбят 1 json? И всё такое прочее.
>>2184611 Если в памяти нужно, то почему бы и нет. Просто хранишь массив своих объектов (десериализованных из json'a). И когда приходит запрос на обновление какого либо их них делаешь filter(...), находишь нужный объект, обновляешь. Без всяких фреймворков, просто руками.
>>2184580 (OP) > нужно доставать из памяти и фильтровать по разным критериям. Пробовал редис, но там хрен отфильтруешь, так как key/value Так фильтруй по ключу, долбоёб
Предположим в роут вебсервера (fastapi) влетает огромный json. Последующие апи запросы (их много, сотни тысячи) модифицируют эти данные. Пробовал сохранять всё в базу, запросы очень частые, получается медленно.
Нужно как-то держать эти данные в памяти, чтобы можно было с ними работать через апи. Сохранность данных не важна, нужно доставать из памяти и фильтровать по разным критериям. Пробовал редис, но там хрен отфильтруешь, так как key/value. Куда копать ?