在SQL Server数据库中将距离矩阵存储为VarChar(Max)

时间:2012-10-09 21:09:29

标签: sql-server-2008 database-design varcharmax

我正在开发一个车队调度应用程序,并寻找一种有效的方法来存储地理位置之间的距离。

应用程序代码将矩阵作为二维数组 double[,] 进行访问。

为了使矩阵持久化,我目前将矩阵序列化为字符串。序列化后,它看起来像这样:

"1 4 9 8 3 6 \n
 5 6 7 9 3 6 \n
 34 4 5 6 6 7 \n"

然后将其存储在SQL Server 2008数据库中的varchar(max)类型的列中。但是,我想知道这个字符串是否会变得太大。

假设每个条目都有一个数字而忽略了空格和“\ n”s,理论上我可以存储大约46000个位置的距离(平方根2 147 483 647 - varchar(max)的大小)在一个条目中。在我的背景下这就足够了。

这种方法有任何严重的缺点吗?将距离存储在一个额外的表中会更好吗,每个行在两个位置之间包含一个距离?

如果我们的应用程序的100个用户分别存储了1000个位置,那么在这样的表格中我会有100000000 = 100 * 1000 * 1000行....

1 个答案:

答案 0 :(得分:1)

您可以将数组压缩为blob字段。那将是最有效的。而不是序列化为字符串,压缩为字节数组,反之亦然。