Вот что я смог раскрыть о последствиях хранения таких строк в SSAS, особенно в SSAS 2008. Когда я рассматриваю структуры данных, он сосредоточен исключительно на хранилище MOLAP, с чем я экспериментировал.
Во-первых, стандартные инструменты MS ETL (извлечение / преобразование / загрузка, т. Е. Импорт данных), такие как Business Intelligence Development Studio, могут попытаться запретить импорт больших текстовых полей, особенно полей varchar (max), но есть обходной путь, и это доказал свою эффективность для меня. (Для BIDS это включает ручную установку элемента DataSize в XML-файле, потенциально до магического размера 163315555 байт. Для выяснения этого необходимо перейти к Matija Lah .)
Во-вторых, насколько я могу судить, хранение множества длинных уникальных строк не должно наносить ущерб структурам данных на диске, используемым SSAS. Кроме того, размер строковых данных на диске должен быть того же порядка, что и строковые данные в вашем источнике данных. Вот некоторая грубая информация о строках SSAS:
- Основные структуры данных OLAP (например, для атрибутов измерения или для фактов групп мер) напрямую не содержат строк; вместо этого содержат смещения в файлах «хранилища строк» (расширения .ksstore, .asstore, .bsstore или .string.data), которые содержат фактические строковые данные.
- В данном хранилище строк каждая строка представляется только один раз. Если несколько строк в ваших исходных таблицах данных содержат повторяющиеся строки, то на уровне SSAS / MOLAP это будет переводиться в дублированные смещения файлов, а не в дублированные строковые значения
- Если исходная строка имеет длину n, то соответствующая структура данных в хранилище строк имеет 8-байтовые байты служебной информации плюс 2 * n байтов на символ. (Строки по сути хранятся в 2-байтовом формате Unicode в SSAS.)
- Для некоторых фантастических подробностей об этом материале я предлагаю книгу Microsoft SQL Server 2008 Analysis Services Unleashed , в частности главу 20 «Физическая модель данных».
- По крайней мере, в моих экспериментах файлы хранилища строк выглядят не сжатыми - по крайней мере, они не намного меньше, чем хранилище несжатой строки.
Я экспериментально проверил, что текстовые данные занимают одинаковый порядок байтов, хранятся ли они в SSAS MOLAP или в таблице sql. В частности, я сделал «выбрать сумму (len (myfield)) из mytable» из одной из моих таблиц измерений, а затем сравнил с размером файлов соответствующих атрибутов в моем каталоге данных SSAS. Размер был 172 МБ в SQL и 304 МБ в SQL-сервере. (Размер Sql составлял 147 МБ, если я суммировал все уникальные строки, а не все строки.) В моем случае разница в размере объяснялась главным образом кодировкой символов; Мои исходные данные sql хранятся с одним байтом на символ, тогда как SSAS хранит все строки с двумя байтами на символ. Я обнаружил, что файл .kssstore полностью доминировал над всеми остальными файлами, связанными с этим атрибутом по размеру, независимо от того, оптимизировал ли я атрибут с помощью AttributeHierarchyOptimizedState = FullyOptimized.
В-третьих, размер файлов хранилища строк ограничен 4 ГБ, что ограничивает объем уникального текста, который может быть связан, скажем, с определенным измерением / атрибутом. В моем случае я до 10% пути до предела, но это может повлиять на некоторых людей. (Быстрый порядок порядка для исходного сообщения: 1M фактов * 10 000 байт / за факт = 10 ГБ текста). Если вы достигнете этого предела, вы, очевидно, достигнете его во время «обработки» куба. Очевидно, это относится даже к размерам ROLAP. Там могут быть некоторые хаки, чтобы обойти это. Смотрите здесь . Обратите внимание, что Sql Server 2012 может снять это ограничение 4 ГБ .
Далее, кажется, что если длинные уникальные строки создают проблему в SSAS, они делают это на уровне представления в памяти. Одна потенциальная проблема (которую я не рассматривал подробно) заключается в том, что кэширование этих дополнительных строк в памяти не позволит SSAS сохранить другие важные структуры данных в памяти и, таким образом, ухудшит производительность. Другая проблема, предложенная книгой Инструментарий хранилища данных Microsoft (хотя я еще не нашел это утверждение в другом месте), заключается в том, что SSAS выполняет некоторые обширные дополнения строк в своих структурах данных в памяти:
"Реляционная база данных хранит строковые столбцы переменной длины ... Однако другие части набора инструментов SQL Server будут заполнять эти столбцы до их полной ширины. Примечательно, что столбцы строк панели служб Integration Services и Analysis Services с пробелами по мере загрузки и Integration Services, и Analysis Services любят физическую память, поэтому стоит объявить строковые столбцы гораздо шире, чем нужно. "
В заключение, до сих пор хранение моих длинных строковых данных в кубе кажется удобным, и я не обнаружил никаких причин ожидать катастрофы, поэтому я попробую. Я постараюсь предоставить обновление, если что-то не получится.