Java压缩集合库

时间:2013-01-21 01:47:16

标签: java collections compression

是否有Java第三方库提供压缩其组成对象的集合?我用Google搜索但是空白了。这样的构造不会对大型(读取多场)地图或某些此类事物有用吗?当然,存在访问和存储的性能损失,但是对于长期不常访问的引用,这似乎是合理的,不是吗?

3 个答案:

答案 0 :(得分:3)

此用例主要是内存数据库的用例,因此您应该查看这些用例。

如果你这样做,你可能必须基本上将任意java对象序列化为字节,然后将它们反射回类中。也可以使用内存数据库 - 无论如何我都看不出真正的区别,除了java可能有点高级别。

请注意,这实际上是特定于java的 - 可能是在C中你可以拥有一个可以获取内存而只是压缩它而不需要做任何花哨的东西的库,但是因为Java无法访问记忆它让那种事情变得有点难......

答案 1 :(得分:2)

MapDB显然实现了Java集合样式映射,可以执行“透明压缩”(参见http://www.mapdb.org/apidocs/org/mapdb/DBMaker.html#compressionEnable())。

我认为它适用于磁盘存储或堆外存储(请参阅http://www.mapdb.org/apidocs/org/mapdb/DBMaker.html#newDirectMemoryDB()),因此您可以选择磁盘块或非垃圾收集内存块。

答案 2 :(得分:1)

不太可能 - 在大多数情况下,这样的集合并不是非常有用

数据结构通常旨在为一组特定使用模式提供高性能。添加压缩只会增加开销并减慢它们的主要用例。特别要注意的是,最有效的压缩算法使用对先前看到的数据的反向引用。这通常与集合类中预期的随机访问模式不兼容(即无法有效实现),也与变异集合部分的能力不兼容。

当然,压缩非常适合顺序访问大块数据,并处理我们需要在较慢的存储和主内存之间进行混洗的非常大的数据量。但是我们已经为那个被称为文件系统和数据库的工具提供了很好的工具: - )