我在內存中有一個堆棧數據結構。我將如何將這些數據保存到數據庫中。我可以使用任何格式的json,xml或專有格式。一旦它被序列化並持續存在,我需要一種反序列化並存儲在內存中的方法。我想我可以使用普通的JSON數組來存儲,但想問問是否有更好的想法。如何將隊列和堆棧保存到數據庫中
回答
堆棧只是一個有序的項目序列。
您可以將任何數據庫中的所有項目存儲在一張表中,並添加一列以維護訂單。
例如,如果你需要存儲一個人,有姓名,你可以使用表
Field Type
---------------
name varchar
surname varchar
position int
您可以檢索在同一順序的元素與查詢像
select name, surname from persons order by position
然後你可以建立你的堆棧插入所有的項目。
JSON格式編組數據不存儲在文本字段(VARCHAR或LONGTEXT)。如果你真的需要處理JSON數據,你可以使用新的json datatype可從MySQL 5.7.8:
在MySQL 5.7.8,MySQL支持原生JSON數據類型,允許在JSON有效地訪問數據( JavaScript對象表示法)文檔。 JSON數據類型相比將JSON格式的字符串存儲在字符串列中提供了這些優勢:
自動驗證存儲在JSON列中的JSON文檔。無效的文檔會產生錯誤。
優化的存儲格式。存儲在JSON列中的JSON文檔將轉換爲允許快速讀取文檔元素的內部格式。當服務器稍後必須讀取以二進制格式存儲的JSON值時,不需要從文本表示中解析該值。二進制格式的結構使服務器能夠直接通過鍵或數組索引來查找子對象或嵌套值,而無需讀取文檔中之前或之後的所有值。
有兩種方法。
方法1如果您不需要訪問隊列/堆棧中的單個元素(您總是加載它們),那麼您只需存儲隊列/堆棧的序列化副本。或者,如果隊列/堆棧(或其元素)足夠複雜,則可以將其編組爲XML或JSON字符串。在這兩種情況下,您都可以將該字符串存儲到數據庫列(可能在longtext
數據類型中)。當你需要的隊列/棧,你看從DB的字符串,然後反序列化或解組回一個Java隊列/棧。
對於JSON,你可以使用GSON(com.google.gson.Gson
和朋友);爲XML,你可以,如果你需要訪問的各個元素(例如,它們將形成與其他一些實體的實體關係)使用JAXB(javax.xml.bind.JABContext
和朋友)
方法2,那麼你應該映射您的隊列/棧(作爲一個集合)分成幾個數據庫表中的各個行。 Hibernate將是一個很好的工具。谷歌爲「休眠映射集合」
對於方法2:您至少需要添加一個列位置來維護廣告訂單。存儲沒有這些信息的項目可以改變數據庫中重建堆棧的順序。另外使用像hibernate這樣的框架只是因爲你不能手動創建堆棧,這是一個非常糟糕的方法。 –
- 1. 如何將數據保存在基於卡的數據庫堆棧中?
- 2. 堆棧和隊列用java
- 3. 在堆棧和隊列
- 4. 如何解決堆棧和隊列數據結構?
- 5. 如何在數據庫中存儲堆棧或長陣列?
- 6. 隊列+堆棧C++
- 7. 如何在VHDL中實現堆棧/隊列等數據結構?
- 8. 如何將數據保存到無數據庫的陣列中
- 9. 從隊列中將值壓入堆棧
- 10. cuda中的遞歸/堆棧和隊列
- 11. 保存堆棧?
- 12. 將列表中的項目移動到堆棧或隊列中
- 13. 如何將應用程序堆棧保存到一個包中?
- 14. 如何實現兩個堆棧隊列
- 15. 如何將陣列數據保存到mysql數據庫
- 16. 列表,數組,堆棧隊列?
- 17. 如何將Handsontable保存到數據庫
- 18. 在C++中鏈接雙棧鏈表和堆棧和隊列類
- 19. 使用隊列堆棧
- 20. Android的隊列VS堆棧
- 21. 堆棧和隊列,爲什麼?
- 22. 比較隊列和堆棧的內容
- 23. 可觀察堆棧和隊列
- 24. java - 堆棧和隊列混淆
- 25. 堆棧和隊列的使用情況?
- 26. 移植Windows隊列/堆棧到android
- 27. 如何在java中實現堆棧和隊列?
- 28. 我想實現一個隊列,將反轉堆棧和打印堆棧FIFO?
- 29. 如何將JTextField中的數據保存到mysql數據庫中?
- 30. 如何將散列數組保存到數據庫?
我正在使用mysql – Luke101
您的應用程序或其他人需要查詢隊列/堆棧時,他們存儲在數據庫中?如果是,二進制格式將阻止查詢。 –
我的應用程序將查詢隊列。我想你是正確的。我會試試你的方式和大衛。我會看看哪一個效果最好。 – Luke101