2016-04-15 40 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

這取決於你的用例。對於可擴展設計,您可以添加一個新表。這將使得將來可以自由地以可讀格式添加許多條目。這種方式可以從數據庫中獲取數據類型約束(例如,只允許整數),在將來向表中添加其他屬性(列),而且您將需要更少的解析從數據庫讀取邏輯。

相關問題