在数据库中存储BitSet数组的最佳方法是什么?

4
我有一个 java.util.BitSet 数组,想要将它存储到我的数据库中,但我不知道最好的方法是什么。 准确地说,我有一些形如 x*y true or false 的值需要存储。我认为使用 java.util.BitSet 是一个不错的选择,但我不知道该如何将其存储到数据库中。 我正在使用带注释的 Hibernate 和 MySQL 数据库。 这是我初始化映射的方式:
 Bitset[] map = new BitSet[x];
 for (int i = 0; i < x; i++) {
     map[i] = new BitSet(y);
 }

更新:

这个数据集中没有关系,问题是我有很多这样的“二维数组”,每一块大约有360*180大小。

我也试图将其制成图片,黑白pbm文件很容易制作。但是,数据仍然不在数据库中,每次处理保存的“图像”文件都会感觉过度使用,而且有点慢。


你会查询哪些内容?你是否关心如何获取第i位?那么我的回复就有效了。如果你想一次获取整个内容,那么你可能需要将整个数据块放入数据库中。 - Adrian
我想一次性获取整个东西,有时只需要几个位来表示,比如[x,y]位置周围的所有8个位。所以我不确定你的方法是否适合我。 但当然要点赞,我仍在考虑你的方法,也许它会很好 :) 感谢您的评论! - Sorex
根据您所需的数据库速度,您可能希望以不同的方式存储位(全部放在一个 blob 中并分开存储(针对单个位查询进行优化))。这对于读取非常有效;如果您有大量写入操作,则会遇到一致性问题。让我编辑我的回复。我刚想到了一些东西。 - Adrian
1个回答

2
您可以在数据库中拥有一个整数列(或等价物)。
如果您有2列,并假设每列为32位,则可以在行1列1中放入32位,然后在行1列2中放入下一个32位,然后转到行2列1并重新开始,以此类推。
这些位之间是否存在任何关系可以利用?还是只是一个大的转储?
注意:我使用了这种技术来压缩数据,因此可能不完全符合您的需求。
编辑:我正在考虑存储原始blob并通过将其存储在单独的实体中(新表或更多列)来跟踪修改的位。您拥有原始blob,然后是BitIndex:BitNewValue的映射。这个更适合的框架现在是map reduce。但是我可以看到如果许多位被改变,管理这样的东西可能会变成一个巨大的头疼。

我更新了我的问题并添加了一些额外的信息,感谢您的评论! - Sorex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接