Sparse columns — поддержка в СУБД и другие вопросы
От: Аноним  
Дата: 01.05.15 23:52
Оценка:
Задача такая: надо как-то хранить много (сотни тысяч) таблиц, структуры которых заранее неизвестны.

Навели на такую технику: EAV (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model). Как я понял, надо городить отдельную запись под каждое значение. Что-то оно мне не нравится, запросы все усложняются на ровном месте.

Читая про EAV натолкнулся на такую штуку, как Sparse columns (в MS SQL Server). С ними можно создать одну гигантскую таблицу (гигантскую как вширь, так и вглубь) с полями Int1, Int2 .. Int1000, Float1, Float2 .. Float1000, NVarchar255_1, NVarchar255_2 .. NVarchar255_1000. При этом колонки с суффиксами больше 3 можно пометить как SPARSE и NULL'ы в них перестанут жрать место за счет небольшого оверхеда для non-NULL'ов. В эту таблицу можно упихать все сотни тысяч таблиц, а маппинг вынести в отдельную таблицу.

Первый вопрос: а как эта же штука поддерживается в других СУБД? Oracle, PostgreSQL, Maria. Допустим, ARRAY из PostgreSQL. Это аналог? Можно ли его использовать в рамках описанной задачи?

Второй вопрос: какие подводные камни с перфомансом следует ожидать при таком подходе?

Третий вопрос: что делать с индексами? Хотелось бы в каждой из мелких таблиц дать возможность выбирать колонку для индексирования, но при таком подходе в индекс рано или поздно попадут все колонки.

Четвертый вопрос: кроме EAV и Sparse columns есть еще варианты?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.