创建缓存应该使用文件系统还是内存?
Creating cache shall I use file system or the memory?
我有数百万行要从数据库中读取,并且一天有多个用户来读取相同的数据。所以我想创建一个缓存。这样我就不必为相同的数据再次访问数据库。
我看过很多选项,但找不到要使用的方法。
创建我自己的缓存我正在考虑保存查询结果的数据并写入文件或
在内存缓存中使用第三方?
Guava CacheBuilder,LRUMap 缓存,whirlycache,cache4j。
这完全取决于多种因素。我认为答案将基于环境、数据大小等。这里是要点
您希望尽可能将缓存保留在 ram 中,因为它比在文件系统中访问速度更快。
您还可以使用 OS 内存映射文件来平衡访问与利用率。除了创建自己的
之外,我建议任何经过验证的解决方案
如果您 运行 内存不足,那么您可能需要询问什么更重要,例如缓存最常访问的数据,因为客户最有可能询问这些数据。
所以没有确定的或明确的答案,但你必须根据你的限制来决定。希望这有帮助
我认为您过度设计了问题,编写高性能、透明的缓存并非易事,除非您只需要一个简单的 HashMap 来保存一些值。你应该专注于编写代码来解决你的域问题,而不是编写太多的框架代码。
停止重新发明轮子,使用内存缓存(例如 infinispan 或 redis)或数据库(例如 postgres)。你将有更少的痛苦和更好的表现。
您不是第一个有这种需求的人,这就是为什么有数十种缓存实现作为开源项目可用,甚至还有一套标准的 Java 缓存 API (JCache)。如果您的需求超出这些解决方案,甚至还有商业解决方案可以跨 RAM、闪存、数据库等透明地处理数十 TB 的数据。如果其中 none 就足够了,那么您绝对应该编写自己的解决方案。
我有数百万行要从数据库中读取,并且一天有多个用户来读取相同的数据。所以我想创建一个缓存。这样我就不必为相同的数据再次访问数据库。
我看过很多选项,但找不到要使用的方法。
创建我自己的缓存我正在考虑保存查询结果的数据并写入文件或
在内存缓存中使用第三方?
Guava CacheBuilder,LRUMap 缓存,whirlycache,cache4j。
这完全取决于多种因素。我认为答案将基于环境、数据大小等。这里是要点
您希望尽可能将缓存保留在 ram 中,因为它比在文件系统中访问速度更快。
您还可以使用 OS 内存映射文件来平衡访问与利用率。除了创建自己的
之外,我建议任何经过验证的解决方案
如果您 运行 内存不足,那么您可能需要询问什么更重要,例如缓存最常访问的数据,因为客户最有可能询问这些数据。
所以没有确定的或明确的答案,但你必须根据你的限制来决定。希望这有帮助
我认为您过度设计了问题,编写高性能、透明的缓存并非易事,除非您只需要一个简单的 HashMap 来保存一些值。你应该专注于编写代码来解决你的域问题,而不是编写太多的框架代码。
停止重新发明轮子,使用内存缓存(例如 infinispan 或 redis)或数据库(例如 postgres)。你将有更少的痛苦和更好的表现。
您不是第一个有这种需求的人,这就是为什么有数十种缓存实现作为开源项目可用,甚至还有一套标准的 Java 缓存 API (JCache)。如果您的需求超出这些解决方案,甚至还有商业解决方案可以跨 RAM、闪存、数据库等透明地处理数十 TB 的数据。如果其中 none 就足够了,那么您绝对应该编写自己的解决方案。