Java 用于维护海量数据的缓存框架
Java Caching frameworks for maintaining huge data
Java 用于存储大量数据的缓存框架。
上下文: 我们正在使用 Jersey 2.6 开发 Restful 服务,并将在 WAS 8.5 上部署它。此服务每天需要处理超过 1000 万个请求。
我们需要实现一个缓存来存储超过 300k 的对象(数据将来自 DB)。我们需要一些方法来每天更新缓存。
- 是否推荐这种缓存 300k 对象并每天更新它们的方法?
- 有没有Java框架支持这种功能?
是的,例如:Coherence、Hazelcast。都是分布式现金。
http://java.dzone.com/articles/sneak-peek-jcache-api-jsr-107
一般来说,您应该缓存您正在使用的内容,并且缓存应该始终同步而不是每天。您将最近使用的对象放入缓存中,然后通过缓存将 read/write 获取到您的数据库。
如果有钱,最好的是连贯性(大金融公司的口碑证明)
Hazelcast 是您可以使用的另一种分布式缓存内存,它比基于性能指标的一致性低一级。
可以尝试 ehcache。它可以用作查询缓存甚至休眠二级缓存。
您可以配置实体在失效之前应在缓存中存储多长时间。
问题是缓存是否必须分布。记住缓存是你见过的东西。并张贴它以寻找它可能有用的机会......为什么。
分布式缓存系统:内存中的Redis、Cassandra。 MongoDB在记忆中。
本地 RocksDB(让你存储 byte[] -> byte[])和 SSD 构成了一个很好的本地缓存层。您还可以在其之上添加分布式层。通常比货架上的东西更好。应该也很容易实施。
每天 1000 万个请求并不多。在 10 小时内,您可以处理 1Mio / 60 / 60 => 每秒 3000 个请求。根据负担得起,您通常可以选择高效的前端和高效的后端。我们可以每秒处理 40k 页和核心,并拥有 24 个核心……你知道数学。内存中的数据未完成缓存...
您的问题过于笼统,无法得到明确的答案。您需要描述您要解决的问题是什么。
- 您是否担心响应时间?
- 您是否正在尝试保护您的数据库免于承担繁重的工作?
- 是否期望必须横向扩展并希望确保您可以处理未来的负载?
此外,一些更多的上下文信息会很有用,尤其是:
- 与您的请求相比,您的数据有多动态?
- 平均每天请求的数据占数据总量的百分比是多少? (30 万个对象中有多少个每天至少查询一次?如果您不知道,请提供您的最佳猜测)。
您给出的数字为 30 万 (300k) 个数据点和 1000 万个请求,这意味着您预计平均每天命中每个对象 33 次,这表明您比响应更关心后端数据库负载是最新的。
根据我的经验,有很多相当原始的解决方案比 Mongo、Cassandra 或 Coherence 等重量级分布式系统要好得多。
我的第一反应是:保持简单 - 30 万个对象存储在内部哈希中并不过分 table,您每天刷新一次并在第一次请求时填充。
如果您需要横向扩展,我建议使用 1 天缓存时间的 Memcache Spymemcached,当您找不到现有条目时填充它。
我不会选择 Cassandra 或 Mongo 之类的东西,除非你有真正令人信服的理由需要持久存储。理由:清除可能会变得非常繁重,尤其是当您的数据移动速度很快时。例如:Cassandra 并不真正知道如何删除,而是 "tombstones" 删除条目,这意味着您的数据存储将不断增长,直到您创建清除策略。
如果您已经拥有 WebSphere ND 8.5.5,您可以看看随附的 WebSphere Extreme Scale。它是与 WebSphere 集成的分布式分区缓存解决方案。有关详细信息,请参阅 WebSphere eXtreme Scale overview。
查看新的 JCache 标准(Java 社区流程中的 JSR 107)。此 API 由 Coherence 和其他缓存实现(ehcache 等)实现,还有一个小型参考实现,您可以将其用于基本用例。
是的,任何 Java 缓存框架都应该能够帮助您。 Coherence(注意:我在 Oracle 与 Coherence 合作)例如绝对可以轻松处理 3,00,000 个项目(如果你使用 lakh,我假设你来自印度!),但我建议仅在你将其部署在多个项目上时才使用 Coherence服务器。
对于缓存提供程序,我建议使用 Coherence,我在公司使用的是 Coherence,它非常健壮并且可以在多个集群上同步。
关于如何处理缓存的另一点,这取决于您的应用程序的性质,根据我对缓存的经验,我决定在以下情况下更新缓存:
1.网格分页
2.浏览
并决定清除缓存并重新加载数据:
- 编辑项目
- 添加新项目
- 删除项目
我决定维护缓存是一种过度头痛,当您处理某种统计数据和嵌套层次结构时,它会被吹到您的脸上。
希望对您有所帮助。
Java 用于存储大量数据的缓存框架。
上下文: 我们正在使用 Jersey 2.6 开发 Restful 服务,并将在 WAS 8.5 上部署它。此服务每天需要处理超过 1000 万个请求。
我们需要实现一个缓存来存储超过 300k 的对象(数据将来自 DB)。我们需要一些方法来每天更新缓存。
- 是否推荐这种缓存 300k 对象并每天更新它们的方法?
- 有没有Java框架支持这种功能?
是的,例如:Coherence、Hazelcast。都是分布式现金。 http://java.dzone.com/articles/sneak-peek-jcache-api-jsr-107
一般来说,您应该缓存您正在使用的内容,并且缓存应该始终同步而不是每天。您将最近使用的对象放入缓存中,然后通过缓存将 read/write 获取到您的数据库。
如果有钱,最好的是连贯性(大金融公司的口碑证明)
Hazelcast 是您可以使用的另一种分布式缓存内存,它比基于性能指标的一致性低一级。
可以尝试 ehcache。它可以用作查询缓存甚至休眠二级缓存。 您可以配置实体在失效之前应在缓存中存储多长时间。
问题是缓存是否必须分布。记住缓存是你见过的东西。并张贴它以寻找它可能有用的机会......为什么。
分布式缓存系统:内存中的Redis、Cassandra。 MongoDB在记忆中。
本地 RocksDB(让你存储 byte[] -> byte[])和 SSD 构成了一个很好的本地缓存层。您还可以在其之上添加分布式层。通常比货架上的东西更好。应该也很容易实施。
每天 1000 万个请求并不多。在 10 小时内,您可以处理 1Mio / 60 / 60 => 每秒 3000 个请求。根据负担得起,您通常可以选择高效的前端和高效的后端。我们可以每秒处理 40k 页和核心,并拥有 24 个核心……你知道数学。内存中的数据未完成缓存...
您的问题过于笼统,无法得到明确的答案。您需要描述您要解决的问题是什么。
- 您是否担心响应时间?
- 您是否正在尝试保护您的数据库免于承担繁重的工作?
- 是否期望必须横向扩展并希望确保您可以处理未来的负载?
此外,一些更多的上下文信息会很有用,尤其是:
- 与您的请求相比,您的数据有多动态?
- 平均每天请求的数据占数据总量的百分比是多少? (30 万个对象中有多少个每天至少查询一次?如果您不知道,请提供您的最佳猜测)。
您给出的数字为 30 万 (300k) 个数据点和 1000 万个请求,这意味着您预计平均每天命中每个对象 33 次,这表明您比响应更关心后端数据库负载是最新的。
根据我的经验,有很多相当原始的解决方案比 Mongo、Cassandra 或 Coherence 等重量级分布式系统要好得多。
我的第一反应是:保持简单 - 30 万个对象存储在内部哈希中并不过分 table,您每天刷新一次并在第一次请求时填充。
如果您需要横向扩展,我建议使用 1 天缓存时间的 Memcache Spymemcached,当您找不到现有条目时填充它。
我不会选择 Cassandra 或 Mongo 之类的东西,除非你有真正令人信服的理由需要持久存储。理由:清除可能会变得非常繁重,尤其是当您的数据移动速度很快时。例如:Cassandra 并不真正知道如何删除,而是 "tombstones" 删除条目,这意味着您的数据存储将不断增长,直到您创建清除策略。
如果您已经拥有 WebSphere ND 8.5.5,您可以看看随附的 WebSphere Extreme Scale。它是与 WebSphere 集成的分布式分区缓存解决方案。有关详细信息,请参阅 WebSphere eXtreme Scale overview。
查看新的 JCache 标准(Java 社区流程中的 JSR 107)。此 API 由 Coherence 和其他缓存实现(ehcache 等)实现,还有一个小型参考实现,您可以将其用于基本用例。
是的,任何 Java 缓存框架都应该能够帮助您。 Coherence(注意:我在 Oracle 与 Coherence 合作)例如绝对可以轻松处理 3,00,000 个项目(如果你使用 lakh,我假设你来自印度!),但我建议仅在你将其部署在多个项目上时才使用 Coherence服务器。
对于缓存提供程序,我建议使用 Coherence,我在公司使用的是 Coherence,它非常健壮并且可以在多个集群上同步。
关于如何处理缓存的另一点,这取决于您的应用程序的性质,根据我对缓存的经验,我决定在以下情况下更新缓存: 1.网格分页 2.浏览
并决定清除缓存并重新加载数据:
- 编辑项目
- 添加新项目
- 删除项目
我决定维护缓存是一种过度头痛,当您处理某种统计数据和嵌套层次结构时,它会被吹到您的脸上。
希望对您有所帮助。