Потеря производительности JSON в базе данных Sql Server
В настоящее время я храню JSON в своей базе данных как VARCHAR(max)
который содержит некоторые преобразования. Один из наших специалистов просит сохранить исходный файл JSON, из которого он был преобразован.
Я боюсь, что если я добавлю еще один столбец JSON, это приведет к увеличению размера страницы и уменьшению времени доступа. С другой стороны, эта таблица не будет очень большой (максимум около 100 строк с каждым столбцом JSON, занимающим 4-6 Кбайт), и к ней можно обращаться до 4 или 5 раз в минуту.
Я скупой привратник, беспощадно ругающий наши технологии, или хитрый архитектор, поддерживающий масштабируемость системы?
Кроме того, мне интересно узнать о (относительно) новом типе filestream/BLOB. Из того, что я прочитал, я чувствую, что большие двоичные объекты хранятся в каком-то отдельном месте, так что реляционные запросы вообще не замедляются. Поможет ли переключение varchar на файловый поток?
2 ответа
Обычно BLOB является предпочтительным для объектов, которые хранятся, в среднем, больше, чем 1 МБ.
Я думаю, что вы должны хорошо держать их в одной базе данных. 100 строк не много для базы данных.
Кроме того, каков смысл сохранения оригинального и преобразованного JSON. Если исходный JSON не будет использоваться как часть обычной обработки и просто необходим для хранения ссылок, я бы предложил сохранить отдельную таблицу и вывести туда исходный JSON со ссылочным ключом и использовать оригинал только при необходимости.
Ваш вариант использования не выглядит слишком востребованным. 4-6KB и менее 100 или даже 1000 строк в этом отношении все еще довольно легки. Хотя я знаю, что ожидаемый вариант использования почти никогда не заканчивается фактическим использованием. Если люди используют таблицу для других целей, кроме поля JSON, вы, возможно, не захотите, чтобы они возвращали JSON из-за потенциального размера и ненужного раздувания.
Хорошо, что в SQL есть и другие, менее сложные варианты, которые могут нам помочь. https://msdn.microsoft.com/en-us/library/ms173530(v=sql.100).aspx
Я бы посоветовал взглянуть на параметр таблицы "Типы с большими значениями вне строки", так как он совместим с будущим, а параметр "текст в строке" не рекомендуется. По сути, эти опции хранят эти большие текстовые поля вне основной страницы, позволяя правильным данным жить там, где они нужны, и дополнительным STUFF, чтобы иметь другой дом.