Сохранение матрицы расстояний как VarChar(Max) в базе данных SQL Server
Я разрабатываю приложение для планирования автопарка и ищу эффективный способ хранения расстояний между географическими точками.
Код приложения обращается к матрице как двумерный массив double[,]
,
Чтобы сделать матрицу постоянной, я в настоящее время сериализую матрицу как строку. После сериализации это выглядит так:
"1 4 9 8 3 6 \n
5 6 7 9 3 6 \n
34 4 5 6 6 7 \n"
Затем он сохраняется в столбце типа varchar(max)
в базе данных SQL Server 2008. Однако мне интересно, может ли эта строка стать слишком большой.
Предполагая, что каждая запись имеет одну цифру и пренебрегая пробелами и "\n", теоретически я мог бы хранить расстояния около 46000 мест (квадратный корень из 2 147 483 647 - размер varchar(max)
) в одной записи. Этого было бы достаточно в моем контексте.
Есть ли у этого подхода серьезные недостатки? Было бы лучше хранить расстояния в дополнительной таблице, где каждая строка содержит одно расстояние между двумя местоположениями?
Если бы 100 пользователей нашего приложения хранили соответственно 1000 местоположений, у меня было бы 100000000 = 100 * 1000 * 1000 строк в такой таблице....
1 ответ
Вы можете просто сжать массив в поле BLOB-объектов. Это будет наиболее эффективным. Вместо сериализации в строку, сжимайте в байтовый массив и наоборот при чтении.