Sql server 2008 在SQL Server数据库中将距离矩阵存储为VarChar(Max)
我正在开发一个车队调度应用程序,并寻找一种有效的方法来存储地理位置之间的距离 应用程序代码以二维数组的形式访问矩阵Sql server 2008 在SQL Server数据库中将距离矩阵存储为VarChar(Max),sql-server-2008,database-design,varcharmax,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”,理论上我可以在一个条
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”,理论上我可以在一个条目中存储大约46000个位置的距离(平方根为2147483647-varchar(max))。在我的情况下,这就足够了
这种方法有什么严重的缺点吗?是否最好将距离存储在一个额外的表中,其中每行包含两个位置之间的一个距离
如果我们的应用程序的100个用户分别存储了1000个位置,那么在这样的表中我将有100000000=100*1000*1000行。…您可以将数组压缩到一个blob字段中。这将是最有效的。与其序列化为字符串,不如压缩为字节数组,反之亦然。为什么您认为需要以非关系方式存储数据?(关系规则#1:列中没有数组,只有标量)。它几乎不可能以任何效率查询矩阵的内容。我不需要查询矩阵。如果用户使用该应用程序,所有距离都会立即加载到双[,]-数组中。我不想选择单个距离,只是选择整个矩阵,这确实是必要的。但是,如果某些距离被更新,我必须重新生成整个字符串。如果确实需要将数据当作服务器上的黑盒来处理,那么是的,这会更快。但是,每次有人登录或更改某些内容时,试图在客户机和服务器之间来回移动整个2GB+都会非常慢。如果设计允许客户端一次处理和/或更改更少的数据,您会做得更好。
VARCHAR(max)
类型的列的最大大小是2 GB的存储空间-20亿个字符。列夫·托尔斯泰的《战争与和平》是一本1'440页的书,共有60万字——可能有600万个字符——四舍五入。因此,您可以在每个VARCHAR(MAX)
列中粘贴300多份完整的《战争与和平》一书。足够好了?换一种方式来表达@rbaryyoung的评论-为什么要将其存储在数据库中,如果只是将其视为一个文本块,为什么不将其存储为一个平面文件?