JSON序列化和二进制序列化,哪个效率高

.Net技术 码拜 10年前 (2015-03-26) 2911次浏览 0个评论
 

现有一个自定义对象需要储存到sql数据库中去。这个对象里面属性很多,甚至包含一些元素量打到几十万的List集合属性。
本人试着使用JSON序列化这个对象,储存到数据库,报maxjsonlength超限,于是修改为了Int32.MaxValue。这样做,虽然不报错了,但是JOSN字符串肯定很长的吧,这样,会使得数据库文件很大的吧。
我想问的是,采用二进制储存,会不会没有这么大?

JSON序列化和二进制序列化,哪个效率高
10分
从业务上说,为啥不把这些数据分解成数据库记录来存储?而要序列化打包成一堆难以查询的数据来存储?
从技术上说,个人认为你这种量的数据,直接序列化不论如何都是不合适的。非要说的话,二进制序列化应该比json效率高些
JSON序列化和二进制序列化,哪个效率高
1分
引用 1 楼 wjq 的回复:

从业务上说,为啥不把这些数据分解成数据库记录来存储?而要序列化打包成一堆难以查询的数据来存储?
从技术上说,个人认为你这种量的数据,直接序列化不论如何都是不合适的。非要说的话,二进制序列化应该比json效率高些

+1  中肯!  不如分成数据库做。

JSON序列化和二进制序列化,哪个效率高
5分
可以用gzip再压缩一下,再存
JSON序列化和二进制序列化,哪个效率高
引用 1 楼 wjq 的回复:

从业务上说,为啥不把这些数据分解成数据库记录来存储?而要序列化打包成一堆难以查询的数据来存储?
从技术上说,个人认为你这种量的数据,直接序列化不论如何都是不合适的。非要说的话,二进制序列化应该比json效率高些

你说的是属性对应列的方式吗。那List<string>、甚至是List<List<string>>类型的属性,该怎样储存到某列中呢?

JSON序列化和二进制序列化,哪个效率高
2分
引用 5 楼 fg45t5y 的回复:
Quote: 引用 1 楼 wjq 的回复:

从业务上说,为啥不把这些数据分解成数据库记录来存储?而要序列化打包成一堆难以查询的数据来存储?
从技术上说,个人认为你这种量的数据,直接序列化不论如何都是不合适的。非要说的话,二进制序列化应该比json效率高些

你说的是属性对应列的方式吗。那List<string>、甚至是List<List<string>>类型的属性,该怎样储存到某列中呢?

子表

JSON序列化和二进制序列化,哪个效率高
引用 6 楼 wjq 的回复:
Quote: 引用 5 楼 fg45t5y 的回复:
Quote: 引用 1 楼 wjq 的回复:

从业务上说,为啥不把这些数据分解成数据库记录来存储?而要序列化打包成一堆难以查询的数据来存储?
从技术上说,个人认为你这种量的数据,直接序列化不论如何都是不合适的。非要说的话,二进制序列化应该比json效率高些

你说的是属性对应列的方式吗。那List<string>、甚至是List<List<string>>类型的属性,该怎样储存到某列中呢?

子表

阁下说的List<List<string>>类型的属性,用子表储存?子表指的是什么啊?如何储存?请君详细说下

JSON序列化和二进制序列化,哪个效率高
23分
假设你的类型定义如下
class A
{
public string A1{get;set;}
public int A2{get;set;}
public List<List<string>> A3{get;set;}
}

表A:
ID int not null, 主键
A1 nvarchar(255) not null
A2 int not null

表A3:
ID int not null 主键
AID int,外键,对应A表的主键
Key int not null
Value nvarchar(255) not null

A表不用解释,A3表的Key就是List<List<string>>第一级(红色)的下标,string的具体内容就存在Value里

JSON序列化和二进制序列化,哪个效率高
10分
你那个属性也不定要放到数据库中。这样数据文件会很多。你可以将这部分数据存储到文件中。最好和NOSQL结合存储。这样既不会造成很大的关系数据库。而且也方便查找。MongoDB就很好用。有兴趣可以尝试下。
JSON序列化和二进制序列化,哪个效率高
15分
JSON序列化 是将对象的属性以键值对的形式组织成字符串(一个编码过程),显然体积会增大很多。
而且解码后也不能直接还原回原来的对象
二进制序列化 是将对象的内存映射抽取出来形成字符串,还原时只有一个重新分配内存的过程。还原后依然还是你原来的对象

将二进制序列化后的串写入文件,就可以认为他是数据库中的一个表(专用的而已)
如果将你的对象细分成若干个子对象,分别对各子对象做二进制序列化,并以某种格式保存在同一个文件中。
再配上管理方法,那么你就已经实现了自己的 NOSQL 了

JSON序列化和二进制序列化,哪个效率高
引用 8 楼 wjq 的回复:

假设你的类型定义如下
class A
{
public string A1{get;set;}
public int A2{get;set;}
public List<List<string>> A3{get;set;}
}

表A:
ID int not null, 主键
A1 nvarchar(255) not null
A2 int not null

表A3:
ID int not null 主键
AID int,外键,对应A表的主键
Key int not null
Value nvarchar(255) not null

A表不用解释,A3表的Key就是List<List<string>>第一级(红色)的下标,string的具体内容就存在Value里

哦,懂了。实际上我的数据还要复杂些,有List<person>属性,就不太好整了。

JSON序列化和二进制序列化,哪个效率高
10分
是的,序列化后的内容还是日后给自己用的,自然是二进制序列化较好
Soap、XML、json 序列化都是为了交换数据用的
JSON序列化和二进制序列化,哪个效率高
实际上我的数据对象,是这个样的:
http://bbs.csdn.net/topics/391001166
JSON序列化和二进制序列化,哪个效率高
20分
引用 11 楼 fg45t5y 的回复:
Quote: 引用 8 楼 wjq 的回复:

假设你的类型定义如下
class A
{
public string A1{get;set;}
public int A2{get;set;}
public List<List<string>> A3{get;set;}
}

表A:
ID int not null, 主键
A1 nvarchar(255) not null
A2 int not null

表A3:
ID int not null 主键
AID int,外键,对应A表的主键
Key int not null
Value nvarchar(255) not null

A表不用解释,A3表的Key就是List<List<string>>第一级(红色)的下标,string的具体内容就存在Value里

哦,懂了。实际上我的数据还要复杂些,有List<person>属性,就不太好整了。

一样,你说你是List<list<string>>,我就给你一个value,你是person,那就把person里所有的属性都列到A3表里就好了,有什么不好整的


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JSON序列化和二进制序列化,哪个效率高
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!