【发布时间】:2013-05-31 18:07:52
【问题描述】:
我有一个实时监控各种系统的应用程序。根据受监控的应用程序,我得到了不同字段的不同报告。我们每隔 3 分钟收集一次数据。这 3 分钟的间隔可以是 120mb 作为原始 json 和 2-3mb 作为 zipped 或 gzipped json。我们压缩然后缓存到磁盘以避免数据库请求,方法是从磁盘请求这些缓存,解压缩它们并将 json 数据加载到应用程序。根据报告类型,我们会将这些缓存保留 3 天到 30 天。
多年来,我们一直使用磁盘缓存。压缩 3 分钟间隔数据,然后将其保存到磁盘。这导致我使用了很多锁和互斥锁。
我知道我不是唯一遇到此类问题的人。我的缓存很大。我的问题是;有没有更好的方法来保存这些数据并获取它?内存缓存对我来说不是一个解决方案,因为 30 天的数据不能在内存中,而且我无法为此应用程序向服务器添加内存。我需要别的东西。比磁盘更好的东西,而且不使用锁。
附: : 应用程序也是多线程的。
【问题讨论】:
-
请澄清以下内容:(1)“我们正在压缩它们以避免数据库请求”(2)报告和缓存之间的关系(3)为什么“内存缓存不是我的解决方案。”跨度>
-
所以您每天有 480 个间隔,每个间隔 120mb(每天大约 56GB 的未压缩数据)?无论您是点击数据库、文件还是 cpu 周期来压缩,这都是很多 IO。我在一个 VoIP 应用程序上工作,我们将音频压缩为 mp3,在本地使用文件系统直到达到某个阈值,然后卸载到网络共享或 FTP。所以,我没有比你已经在做的更好的答案了。
-
是的,但就像我说的,120mb 的 json 文件可以压缩到 2mb。所以 1 间隔是 2 mb 一整天 1 个监测报告是一个演出。
-
我假设传入的数据流一旦进入,以后不会被修改。正确的?您是否有多个编写器或多个/并行数据流?读者如何与系统交互并使用缓存?并且对“这导致我使用了很多锁和互斥锁”这一声明进行了更多澄清。
-
你考虑过一些 NoSQL 存储引擎吗?我特别在考虑 redis ......它是一个内存中的、快速的、具有持久性的键值存储,应该非常适合这种场景。然后,您可以将大部分锁定/一致性问题交给它。
标签: c# .net database multithreading caching