2016-04-15 38 views
0

我一直在寻找各种解决方案来解决我的问题,但是我找不到我的具体案例的明确答案,所以想知道是否有人可以建议我或者指引我朝着正确的方向发展。什么是一个好的方法来存储一个整数数组(MySQL)到MySQL数据库

在我的Android Studio应用程序中,我有一个2维数组(表示颜色网格)。目前网格的最大尺寸是250x250,但我可能会在未来增加。我事先知道电网的规模。

我想将这个数组存储在MySQL数据库中。我想象的是一个逗号分隔的字符串(例如“1,2,3; 7,8,9”),但后来阅读了序列化,并想知道这样会更好。然而,我对它的了解越多,我越觉得它可能对我所做的事情过度。

我永远不需要从数据库访问一个单独的元素 - 它将永远是一次加载整个网格。

对什么可能是最有效的方法有任何想法?

+0

效率最高?这取决于,但我认为(在你的具体情况下)存储数组作为逗号,九月弦的声音不**太**差...一切**可能**导致更多的代码... – Ben

回答

1

如果您想要全部考虑性能和大小,建议您使用BLOB类型作为数据库条目。然后使用带有getBytes方法的Blob类检索它,将其包装在ByteBuffer中,将其转换为IntBuffer并将其读回到int数组中。

Blob b = (mysql stuff from JDBC); 
byte[] bytes = b.getBytes(0, b.length()); 
ByteBuffer bbuffer = ByteBuffer.wrap(bytes); 
IntBuffer ibuffer = ((ByteBuffer) bbuffer.rewind()).asIntBuffer(); 
int[] intArray = ibuffer.array(); 

然后访问:

intArray[y*gridWidth + x] 

我会发布更多的链接,但没有足够的信誉:(无论如何,它都非常简单,如果你google了一下

再次,这仅仅是因为如果你想真正高效的话,我相信比我更聪明的人可以创造出更疯狂和更快的解决方案,甚至可以进一步存储短语或字节而不是整数,但请记住早熟优化是所有的根源邪恶。你现在最好选择最简单的解决方案,只有当它看起来太慢,需要太多的数据等时才会改变它。

编辑:刚才看到我没有解释如何实际存储它,它本质上同样的过程,但倒退。如果您愿意,我可以将它添加到答案中,只需发表评论即可。

+0

谢谢给你和其他已经回复的人。我现在要用逗号 - 分号分隔的方法去做,但我会记住这一点,并可能在将来改变它(一旦我理清了所有其他不起作用的东西!)。再次感谢所有答复。 – Sharon

+0

根据http://dev.mysql.com/doc/refman/5.7/en/blob.html ---使用临时表处理的查询结果中的BLOB或TEXT列实例导致服务器因为MEMORY存储引擎不支持这些数据类型(请参见第9.4.4节“MySQL中的内部临时表使用”),所以在磁盘上而不是内存中使用表。使用磁盘会导致性能损失,因此只有在确实需要时才在查询结果中包含BLOB或TEXT列。 –

1

这取决于你的用例。对于可扩展设计,您可以添加一个新表。这将使得将来可以自由地以可读格式添加许多条目。这种方式可以从数据库中获取数据类型约束(例如,只允许整数),在将来向表中添加其他属性(列),而且您将需要更少的解析从数据库读取逻辑。

相关问题