Сохранение матрицы расстояний как 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-объектов. Это будет наиболее эффективным. Вместо сериализации в строку, сжимайте в байтовый массив и наоборот при чтении.

Другие вопросы по тегам