【发布时间】:2009-06-03 11:43:30
【问题描述】:
问题设置
- 实体到达进行处理,并通过一系列步骤对这些实体以及可能对其他相关实体进行操作并生成一些结果;
- 某些实体需要实时处理,无需任何数据库访问;
- 目前的实现只是在数据库中查找实体,没有任何缓存。
优化时间:-)
可能的方法
简单缓存
一个简单的内存缓存有两个缺陷:
- 它可能会溢出,因为我们谈论的是大量实体;
- 它不保证在缓存中找到所需的实体,并且无法查询可用性或被要求“预加载”自身。
所以这是不行的。
实体分析+预加载
我正在考虑构建某种分析器,以找出需要为给定实体检索哪些数据,即使是大型形式,并请求缓存以带外加载所需的数据。
步骤如下:
- 实体到达。如果需要在内存中处理,发送缓存加载请求;
- 实体被放置在缓存等待队列中,直到收到缓存加载响应。如果数据可用,这可能是即时的;
- 发送实体进行处理并使用加载的数据;
- 缓存被清除。这确实有可能清除政策,但我目前并不担心这些。
问题
您对这种方法有何看法?我是否遗漏了一些可以在这种情况下应用的众所周知的数据访问模式?
更新 1:忘了说整个处理是单线程的,这确实极大地限制了选项。
【问题讨论】:
-
能否请您澄清有关缓存的问题。我还不完全明白为什么它不是一个选项?这会比目前只有 db 命中的情况要好得多,不是吗?为什么不能预加载缓存?如果大小是个问题,分布式缓存(例如 memcached)可能会有所帮助。