Смешивание RDF и ORM подходов
Я работаю в команде, исследующей технологический стек для проекта по интеграции систем с экологией. Часть нашего стека избранных технологий использует Hibernate для сохранения своего внутреннего состояния и предоставляет хуки для транзакций Hibernate, так что бизнес-объекты остаются синхронизированными с состоянием этой утилиты. Отлично, за исключением того, что нам нужно хранить информацию о сущностях неизвестного типа и связывать эти данные с предопределенными типами. Нам нужно масштабируемое хранилище данных, которое не требует предварительного определения схемы. Самое приятное было бы смешать данные RDF и управляемые объекты Hibernate.
Сталкивались ли вы с подобным требованием и какие подходы вы можете порекомендовать?
Любая смесь RDF/ORM должна поддерживать нечастые крупномасштабные запросы для отчетов и исследования данных, а также частые целевые операции чтения и записи для поддержки транзакций.
4 ответа
Я использую RDF в своем проекте, и мы использовали OWL, чтобы определить онтологию для данных RDF и придать им некоторую структуру. Оттуда мы генерируем классы C# из онтологии OWL. Приятно то, что вы можете добавлять дополнительные данные о своем предмете, но при этом иметь структуру классов, которая имеет смысл в большинстве случаев.
Рассматривали ли вы определение модели гибернации для известных данных и добавление CLOB с XML для хранения неизвестных вещей? Таким образом, вы в основном сохраняете свой обычный код гибернации и только тогда, когда вам нужно получить доступ к дополнительным материалам, вы загружаете XML из полей CLOB и обрабатываете его.
Посмотрите здесь аналогичную проблему с аналогичным решением.
На вики-странице Tripresso есть список картографов Object-RDF, которые позволяют работать с данными RDF объектно-ориентированным способом. Я сомневаюсь, что любой из них интегрируется напрямую с Hibernate, но они, по крайней мере, обеспечивают нечто подобное.
Одним из решений является сохранение объектной модели на уровне тройного хранилища RDF, например, с помощью классов для
- узлы: урис, пробелы и литералы
- операторы: наборы из трех или более узлов (три для тройки RDF, дополнительные узлы для мета)
Выполнение запросов в таком хранилище, по сути, выполняет тройное /n-кортежное сопоставление шаблонов для операторов.