巨大的二进制矩阵(逻辑与位组数组)Java性能

时间:2012-11-12 05:09:23

标签: java arrays performance binary-data bitset

我们有一个java服务,可以在巨大的二进制矩阵(10 000 x 10 000)上计算一些逻辑运算。该矩阵是位集阵列。最重要的操作是给定位集与阵列中每个位集之间的交集(逻辑AND)。我们正在使用OpenBitset,它显示了非常好的结果(至少比java.util.BitSet更好)。数据稀疏度适中(可能连续多个0或1),bitset大小是固定的。

对我们来说最重要的是快速响应时间(目前约为0.05秒),因此随着矩阵和请求数量的增加,我们希望找到进一步改进的方法。可能有一些代数方法或更快的库。

我们尝试使用javaewah,但与OpenBitset相比,此库执行的操作慢了10倍。项目页面上有比较,表明其他bitset-compression库比Java BitSet慢。

你能否提出一些其他方法或新想法?

2 个答案:

答案 0 :(得分:1)

在我最近的博客中,我讨论了一个“又一个”bitset实现 - 包含源代码。也许你想尝试一下:http://www.censhare.com/en/aktuelles/censhare-labs/yet-another-compressed-bitset

答案 1 :(得分:0)

如果您不介意使用客户端服务器解决方案,pilosa将非常适合您的用例。

  • java,python,go的绑定
  • groupby支持
  • 时间范围支持
  • 强大的矩阵支持
  • 使用高性能的roaringbitmap
  • 水平缩放
  • 头盔图表https://github.com/pilosa/helm