Моя рекомендация:
Разрешить помечать свойства как индексируемые. Имеют небольшое жесткое ограничение на количество индексируемых свойств и количество столбцов на объект. Имеют большое жесткое ограничение на количество типов столбцов во всех объектах.
Реализация индексов в виде отдельных таблиц (по одной на индекс), объединенных с основной таблицей данных (основная таблица имеет большой уникальный ключ для объекта). (После этого таблицы индекса могут быть созданы / удалены по мере необходимости).
Сериализация данных, включая столбцы индекса, плюс помещение свойств индекса в реляционные столбцы первого класса в их выделенных таблицах индекса. Используйте JSON вместо XML, чтобы сэкономить место в таблице. Применяйте политику коротких имен столбцов (или политику длинных отображаемых имен и коротких сохраненных имен), чтобы сэкономить место и повысить производительность.
Используйте кварки для идентификаторов полей (но только в основном движке для экономии оперативной памяти и ускорения некоторых операций чтения - не полагайтесь на сравнение указателей кварков во всех случаях).
Мои мысли о ваших вариантах:
1 возможно. Производительность явно будет ниже, чем если бы столбцы идентификаторов полей не сохранялись.
2 - это вообще не ядро БД, не все довольны динамическими изменениями схемы. Но возможно да, если ваш движок БД хорош в этом.
3 Возможно.
4 Да, хотя я бы использовал JSON.
5 Похоже, только 4 менее оптимизированы ??
6 Звучит хорошо; Я бы хотел, если бы захотел попробовать что-то новое, а также если бы был доволен надежностью и производительностью, но обычно хотел бы использовать более массовые технологии. Я также хотел бы сократить число механизмов, участвующих в координации транзакций, до меньшего значения, чем было бы здесь.
Редактировать : Но, конечно, я кое-что порекомендовал, здесь не может быть общего правильного ответа - профилируйте различные модели данных и подходы с вашими данными, чтобы увидеть, что лучше всего подходит для вашего приложения.
Редактировать: Изменена последняя редакция текста.