2012-03-20 160 views
4

我得到了一个java.util.BitSet数组,我想坚持在我的数据库中,但我不知道最好的办法是做什么。 准确地说,我为每个想要存储的条目获得了值x*y true or false。我试过java.util.BitSet是一个很好的尝试,但我真的不知道如何将它存储在数据库中。在数据库中存储BitSet数组的最佳方法?

我正在使用MySQL数据库与休眠(带注释)。

这是我如何初始化我的地图:

Bitset[] map = new BitSet[x]; 
for (int i = 0; i < x; i++) { 
    map[i] = new BitSet(y); 
} 

更新:

有一个在这个数据集中没有关系,问题是,我有一大堆这“2个维数组”的一件大小约为360 * 180。

我也尝试制作一个图像,一个单色的pbm文件很容易制作。但数据仍然不在数据库中,并且每次处理保存的“映像”文件都是过度的,我认为并且有点慢。

+0

你有什么疑问?你是否在乎如何获得第i位?然后我的回复起作用。如果你想要一次完成所有的事情,那么你可能需要把整个blob放在db – Adrian 2012-03-20 15:13:20

+0

我想把所有的东西都放在一起,有时候只是说几句,就像[x,y ]位置。所以这就是为什么我不知道你的方法是否适合我。 但大拇指当然,即时通讯仍然想着你的方法和mybe它会很好:)感谢评论! – Sorex 2012-03-20 15:31:40

+0

取决于您要查找的数据库速度,您可能希望以不同的方式存储位(全部集中在一个块中并单独存储(针对个别位查询进行优化))。这对于阅读很有用。如果你有很多写入,你会遇到一致性问题。让我编辑我的回复。我只想到了一些 – Adrian 2012-03-20 15:38:14

回答

2

你可以在你的数据库中有一列整数(或任何等价物)。

如果你有2列,并假设每列是32位,你可以在 行1列1 32位,然后行1列2下32,然后你去 第2行第1列,并重新开始等等。

这些位之间是否有任何关系可以利用? 或者它只是一个大转储?

注意:我使用这种技术来打包/压缩数据,因此它可能不是您所需要的。

编辑:
我想存储的原始斑点,并通过将其储存在一个单独的实体(新表列或多列) 你有原始的blob跟踪修改位,然后映射BitIndex:BitNewValue
现在更合适的框架是map reduce。 但是我可以看到如何管理这样的事情,如果很多位被改变,会变得非常头痛。

+0

更新我的问题与一些额外的信息,感谢评论! – Sorex 2012-03-20 15:09:22

相关问题