Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在SQL Server数据库中将距离矩阵存储为VarChar(Max)_Sql Server 2008_Database Design_Varcharmax - Fatal编程技术网

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的评论-为什么要将其存储在数据库中,如果只是将其视为一个文本块,为什么不将其存储为一个平面文件?