将java对象存储为MySQL数据库中的json字符串?

时间:2015-03-15 03:02:11

标签: java mysql gson

性能明智,这样做是否明智? 一个例子是Gson

Gson gson = new Gson();
String json = gson.toJson(myObject);

// store json string in sql with primary key
// retrieve json string in sql with primary key

我希望简化存储和检索对象的方式,而不是每次从数据库存储/检索时将它们构建并分成多个单独的列。

但我对使用json字符串的担心是,当数据库填满时,长度可能会影响性能?我不确定,这就是我要问的原因。

2 个答案:

答案 0 :(得分:1)

'空间'没有问题。使用或执行此类:MySQL将处理这个问题。

也就是说,虽然必须拉/推整个JSON块以进行处理和更改,但是MySQL会继续处理,就像数据库填满时一样,甚至是#39;。

但是,遵循此设计时,信息的规范化和不透明性存在问题。数据库是关于信息的,但是一小撮JSON只是一个SQL数据库的JSON。

因此,JSON中的任何数据都不能用于关系或查询,也不能参与索引或约束。对于"关系"数据库的一部分..

除非JSON确实是 opaque data ,就像二进制文件的内容一样,考虑处理相关的规范化..或切换到(JSON)document-oriented数据库(例如Raven) ,Redis,Couch,Mongo)。

答案 1 :(得分:1)

存储JSON字符串没有空间或性能问题。如果你需要,MySQL能够处理大blob。

是否将序列化为JSON的数据存储的决定应基于您如何处理此数据。关系数据库(例如MySQL)假设您规范化数据并建立记录之间的关系。也就是说,在许多情况下,否则可能是实际的(即存储为JSON)。

如果您将数据存储为JSON字符串,则无法使用MySQL功能有效处理此数据,例如:您不能按存储为JSON的值过滤掉或排序记录。但是,如果您只需要存储此数据,而处理将由应用程序代码完成,则使用JSON是合理的。

随着像MongoDB这样面向文档的数据库变得越来越流行,一些传统的关系数据库(如PostgreSQL和MariaDB)最近也实现了本机JSON支持。