- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个小型 infinispan 缓存 PoC(代码如下)来尝试评估 infinispan 性能。在运行它时,我发现对于我的配置 infinispan 显然不会从磁盘中清除缓存条目的旧副本,导致磁盘空间消耗比预期高出几个数量级。
我该怎么做才能将磁盘使用量降低到大约实际数据的大小?
这是我的测试代码:
import org.infinispan.AdvancedCache;
import org.infinispan.manager.DefaultCacheManager;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Random;
public class App {
final static int ELEMENTS_PER_BIN = 1000;
final static int NUM_OF_BINS = 100;
public static void main(String[] args) throws Exception {
File storeFile = new File("store/store.dat");
if (storeFile.exists() && !storeFile.delete()) {
throw new IllegalStateException("unable to delete store file from previous run");
}
DefaultCacheManager cm = new DefaultCacheManager("infinispan.xml");
AdvancedCache<String, Bin> cache = cm.<String,Bin>getCache("store").getAdvancedCache();
Random rng = new Random(System.currentTimeMillis());
for (int i=0; i<ELEMENTS_PER_BIN; i++) {
for (int j=0; j<NUM_OF_BINS; j++) {
String key = "bin-"+j;
Bin bin = cache.get(key); //get from cache
if (bin==null) {
bin = new Bin();
}
bin.add(rng.nextLong()); //modify
cache.put(key, bin); //write back
}
}
long expectedSize = 0;
for (int j=0; j<NUM_OF_BINS; j++) {
String key = "bin-"+j;
Bin bin = cache.get(key);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(bin);
oos.flush();
oos.close();
expectedSize += baos.size();
baos.close();
}
long actualSize = new File("store/store.dat").length();
System.err.println(ELEMENTS_PER_BIN+" elements x "+NUM_OF_BINS+" bins. expected="+expectedSize+" actual="+actualSize+" in "+cache.size()+" elements. diff="+(actualSize/(double)expectedSize));
}
public static class Bin implements Serializable{
private long[] data = null;
public void add(long datum) {
data = data==null ? new long[1] : Arrays.copyOf(data, data.length+1); //expand capacity
data[data.length-1] = datum;
}
}
}
这是 infinispan 配置:
<infinispan
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:6.0 http://www.infinispan.org/schemas/infinispan-config-6.0.xsd"
xmlns="urn:infinispan:config:6.0">
<namedCache name="store">
<eviction strategy="LRU" maxEntries="20"/>
<persistence passivation="false">
<singleFile location="store">
<async enabled="false"/>
</singleFile>
</persistence>
</namedCache>
</infinispan>
infinispan(应该是?)配置为直写式缓存,其中包含 RAM 中的 20 个最新元素以及磁盘上所有内容的实时副本。
运行上面的代码会得到以下结果:
1000 elements x 100 bins. expected=807300 actual=411664404 in 100 elements. diff=509.92741731698254
这意味着对于 788 KB 的数据,我最终得到的文件约为 392 MB!
我做错了什么?
有问题的 infinispan 版本是 6.0.2.Final
最佳答案
当您只存储越来越长的记录时,之前使用的空间不会被重复使用。 SingleFileStore 中没有碎片整理策略,可用空间保留为条目空间列表的映射,但相邻的可用空间不会合并。因此,新条目总是添加在文件的末尾,而开头是碎片且未使用的。
顺便说一下,为了找出预期的大小,您还应该:
关于java - infinispan 文件存储大小与数据大小不成比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878059/
我不想使用 Infinispan 作为我的数据源。提供什么样的数据库支持?是否需要 Hibernate 二级缓存? 最佳答案 Infinispan 可以配置持久缓存加载器,并且在支持的选项中,支持基于
我刚刚尝试将我的应用程序更新到 Infinspan 10.1.8.Final。我通过 build.gradle 中的此依赖项将 Infinispan 用作 2 级休眠 (5.4.18.Final) 缓
我正在使用 Infinispan 缓存。有没有办法在运行时获取条目的 TTL(或 lifepsan)?我看到界面CacheEntry作为 getLifespan() API,但我看不到如何获取 Cac
我们有三个服务必须位于集群中。因此,我们使用 Infinispan 来集群节点并在这些服务之间共享数据。成功重新启动后,有时我会遇到异常,并收到另一节点中左侧节点的“ View 已更改”事件。实际上所
我有以下 infinispan xml 并得到解析异常。javax.xml.stream.XMLStreamException:[行,列] 处的 ParseError:[3,36]消息:遇到意外元素“
我已将我的应用程序部署为 tomcat 6 服务上的 myApp1。由于一些要求,我复制了myApp1并粘贴到webapp下作为myApp2。现在我重新启动了tomcat并点击 myApp1 的网址。
我使用 infinispan-5.1.6.FINAL 作为远程缓存服务器和热棒协议(protocol)来访问它。但发现它没有按预期工作,即按照下面的配置,在 1ms 后不会驱逐键的缓存值
交叉张贴在 https://developer.jboss.org/thread/279735 假设我们有多个 docker 容器(每个都有 java webapps,所以本质上是多个 JVM),每个
我有一个使用 Infinispan 6.0.1.Final 的 Spring Boot 应用程序。我有两个类 A 和 B。B 扩展了 A。并且我有一个存储 B 类型对象的缓存。现在,我做了一个小更改,
在 jgroups 自动选择集群中对大约 180,000,000 条记录进行索引,一切正常(我索引和查询数据,结果似乎有效),但在每次启动和关闭时我都会遇到此类错误。这是我必须担心的实验模式造成的吗?
我们需要一个重新启动的持久缓存。主要目标是在启动时预加载尽可能多的数据。 因此要求是: 从磁盘存储预加载 从已使用热缓存运行的邻居节点预加载 看起来 Infinispan 可能是一个合适的选择,但
我编写了一个小型 infinispan 缓存 PoC(代码如下)来尝试评估 infinispan 性能。在运行它时,我发现对于我的配置 infinispan 显然不会从磁盘中清除缓存条目的旧副本,导致
我们使用 Infinispan 4.0 作为我们的缓存提供程序(我知道它有点过时,因为版本 9 是最新的)。话虽如此,我在阅读文档时有点困惑: Infinispan, by default, acqu
根据 infinispan 的文档:http://docs.jboss.org/infinispan/5.0/apidocs/ evict() API 不会从调用它的缓存存储上的集群中的任何其他缓存存
尝试在 thorntail project-defaults.yaml 上配置缓存,但是在尝试在 wildfly 上启动或部署时遇到以下问题。 错误必须在全局配置中设置传输才能定义集群缓存。 不确定我
环境 嵌入 Infinispan 9.4.18 3 个节点以复制模式缓存 RocksDB 存储(或其他,无关紧要) 重现步骤 创建基于 TCP 的集群 创建缓存 将实体添加到缓存 检查实体是否存储在每
如何将数据预加载到infinispan本地缓存?我有一个预先存在的应用程序表,其中包含键值对。我希望 infinispan 缓存表中的数据,当我读/写数据到缓存时,我希望基础表保持同步。 infini
我使用 JBoss 6.4 EAP 和 Infinispan 6。 org.infinispan infinispan-core 6.0.2.G1.Final 我有
我们使用具有 6 个实例的 JBoss 集群 (EAP 6.4.10),并大量使用捆绑的 Infinispan 5.2.11 来处理不同的内存网格用例。然而,它们中的大多数是分布式缓存(实际上是复制的
我们计划在客户端服务器模式下使用 Infinispan。该架构有许多客户端(客户端 1、客户端 2 等)和分布式 infinispan 网络。 我们需要定期更新缓存中的数据,比如每5小时更新一次。所有
我是一名优秀的程序员,十分优秀!