【问题标题】:Caching / Mapping strategy for standalone java application独立 Java 应用程序的缓存/映射策略
【发布时间】:2015-09-14 11:55:41
【问题描述】:

我有一个磁盘大小约为 50 GB 的 SQL 表。该表是只读的,因此非常适合缓存。对于更快和更频繁的查找,什么是理想的 -

  1. Java 8 哈希映射。
  2. 内存缓存。
  3. 休眠 EH 缓存。 还是更好的?

(提供 200 GB 的主内存可供 JVM 使用)。

【问题讨论】:

  • 数据结构、访问模式、操作和应用程序约束以及性能问题都会影响决策。由于 GC 暂停时间和服务器启动缓慢,简单地将所有数据放在堆上可能会出现问题。

标签: java caching hashmap memcached ehcache


【解决方案1】:

您可以开始尝试Guava cache(Google Core Libraries for Java 1.6+)

一般来说,Guava 缓存实用程序适用于:

  • 您愿意花费一些内存来提高速度。
  • 您希望键有时会被多次查询。
  • 您的缓存不需要存储比 RAM 容量更多的数据。 (Guava 缓存在应用程序的单次运行中是本地的。
    它们不会将数据存储在文件中或外部服务器上。

    如果这不符合您的需求,请考虑使用 Memcached 之类的工具。)

【讨论】:

  • 独立应用程序的 Memcached 看起来太多 io 操作,因为它是一个外部管理的应用程序。 Guava Cache,可以在应用程序中本地使用。谢谢。
  • 网络 I/O 很便宜,multi-gets 掩盖了大部分,并且具有可预测的延迟。本地缓存通常不适合大容量(GC 暂停时间)和高并发(benchmarks)。
【解决方案2】:

免责声明:我在 Ehcache 上为 Terracotta 工作

另一个选择是使用即将推出的Ehcache 3 及其堆外层。这将允许您将整个表缓存在 RAM 中,但不受 GC 的控制,因此不会成为暂停时间的来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多