Вот что мне удалось узнать о последствиях хранения таких строк в 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% пути к пределу, но это может повлиять на некоторых людей. (Быстрый расчет порядка величины для исходного сообщения: 1 миллион фактов * 10 000 байт / факт = 10 ГБ текста.) Если вы действительно достигнете этого предела, вы, очевидно, достигнете его во время «обработки» куба. Судя по всему, это относится даже к размерам ROLAP. Для решения этой проблемы могут быть некоторые хитрости. См. здесь. Обратите внимание, что Sql Server 2012 может снять это ограничение 4 ГБ.
В-четвертых, похоже, что если длинные уникальные строки создают проблему в SSAS, они делают это на уровне представления в памяти. Одна потенциальная проблема (которую я не рассматривал подробно) заключается в том, что наличие этих дополнительных строк, кэшированных в памяти, будет препятствовать SSAS сохранять в памяти другие важные структуры данных и, таким образом, снижать производительность. Другая проблема, предложенная в книге The Microsoft Data Warehouse Toolkit (хотя я еще не нашел это утверждение в другом месте) заключается в том, что SSAS выполняет расширенное строковое заполнение своих структур данных в памяти:
«В реляционной базе данных хранятся строковые столбцы переменной длины ... Однако другие части набора инструментов SQL Server будут заполнять эти столбцы до их полной ширины. Примечательно, что службы Integration Services и Analysis Services заполняют строковые столбцы пробелами по мере их загрузки в память. И службам Integration Services, и службам Analysis Services нравится физическая память, поэтому объявление строковых столбцов, которые намного шире, чем они должны быть, требует затрат ».
В заключение, до сих пор хранение моих длинных строковых данных в кубе кажется удобным, и я не обнаружил никаких причин для ожидания катастрофы, поэтому я пытаюсь. Я постараюсь предоставить обновление, если что-то не получится.
person
Chris
schedule
23.12.2011