如何将队列和堆栈持久化到数据库

时间:2016-12-20 16:55:27

标签: mysql sql serialization data-structures

我在内存中有一个堆栈数据结构。我如何将此数据保存到数据库中。我对任何格式的json,xml或专有格式都是开放的。一旦它被序列化并持久化,我需要一种方法来反序列化并存储在内存中。我以为我可以使用普通的JSON数组进行存储,但想要询问是否有更好的想法。

2 个答案:

答案 0 :(得分:1)

堆栈只是一个有序的项目序列。

您可以将其存储在任何数据库中的所有项目中,并添加一列以保留订单。

例如,如果您需要存储名称和姓氏的人员,则可以使用表格

 Field     Type
 ---------------
 name      varchar
 surname   varchar
 position  int

您可以使用类似

的查询以相同的顺序检索元素
 select name, surname from persons order by position

然后你可以构建插入所有项目的堆栈。

不要在文本字段(varchar或longtext)中以json格式存储编组数据。如果你真的需要处理json数据,你可以使用MySql 5.7.8提供的新json datatype

  

从MySQL 5.7.8开始,MySQL支持本机JSON数据类型,可以高效访问JSON(JavaScript Object Notation)文档中的数据。与在字符串列中存储JSON格式字符串相比,JSON数据类型具有以下优势:

     

自动验证存储在JSON列中的JSON文档。无效的文档会产生错误。

     

优化的存储格式。存储在JSON列中的JSON文档将转换为内部格式,以允许对文档元素进行快速读取访问。当服务器稍后必须读取以该二进制格式存储的JSON值时,不需要从文本表示中解析该值。二进制格式的结构使服务器能够直接通过键或数组索引查找子对象或嵌套值,而无需在文档之前或之后读取所有值。

答案 1 :(得分:0)

有两种方法。

方法1 如果您不需要访问队列/堆栈中的各个元素(您总是一起加载它们),那么您只需存储队列/堆栈的序列化副本即可。或者,如果队列/堆栈(或其元素)足够复杂,您可以将其编组为XML或JSON字符串。在这两种情况下,您都可以将字符串存储到DB列(可能是longtext数据类型)。当您需要队列/堆栈时,您从DB读取字符串,然后将其反序列化或解组,将其重新组合回Java队列/堆栈。

对于JSON,您可以使用GSON(com.google.gson.Gson和朋友);对于XML,您可以使用JAXB(javax.xml.bind.JABContext和朋友)

方法2 如果您需要访问各个元素(例如,它们将与其他实体形成实体关系),那么您应该将队列/堆栈(作为集合)映射到单个行中一些DB表。 Hibernate将是一个很好的工具。谷歌的“休眠地图集”