У меня есть приложение, которое контролирует различные системы в реальном времени. Я получаю разные отчеты с разными полями в зависимости от контролируемого приложения. Мы собираем данные через 3-минутные интервалы. И эти 3-минутные интервалы могут быть 120 МБ, как сырые json и 2-3mb, как zipped или gzipped json. Мы зацикливаемся, затем кэшируем на диск, чтобы избежать запросов к базе данных, запрашивая эти кэши с диска, распаковывая их и загружая json-данные в приложение. Мы храним эти кеши в течение 3 дней до 30 дней в зависимости от типа отчета.Кэширование больших данных
В течение многих лет мы использовали кэширование дисков. Завершение трехминутных данных, а затем сохранение на диск. Это заставило меня использовать много замков и мьютексов.
Я знаю, что я не единственный с такой проблемой. Мой кеш большой. Мой вопрос: Есть ли лучший способ сохранить эти данные и получить их? Кэширование памяти не является решением для меня, потому что 30 дней данных не могут быть в памяти, и я не могу добавить память на сервер для этого приложения. Мне нужно что-то еще. Что-то лучше, чем диск и без использования блокировок.
P.S. : Приложение также многопоточное.
Просьба пояснить следующее: (1) «Мы застегиваем их, чтобы избежать запросов к базе данных» (2) Связь между отчетом и кешем (3) Почему «кэширование памяти не является для меня решением». – Ankush
Редактирование моего вопроса. – Xelom
Итак, у вас есть 480 интервалов в день на 120 мб каждый (около 56 ГБ несжатых данных в день)? Это много IO, если вы нажмете циклы db, file или cpu на zip. Я работал над VoIP-приложением, и мы сжимали аудио в mp3, использовали локальную файловую систему, пока не достигли определенного порога, а затем выгрузили сетевой ресурс или FTP. Итак, у меня нет лучшего ответа, чем то, что вы уже делаете. –