Учитывая требования, которые вы указываете в своем вопросе, графическая база данных, вероятно, является тем, что вы ищете, но есть и другие варианты.Как сказал @Niels van der Rest, очень трудно согласовать два ограничения: «нет априорной схемы» и «ссылочная целостность».Возможно, вам удастся найти базу данных на основе тематической карты, которая могла бы это сделать, но я не знаком с конкретными реализациями, поэтому не могу сказать наверняка.
Если вы решите, что действительно не можете это сделатьбез ссылочной целостности, я боюсь, что вы, вероятно, застряли с RDBMS.Есть некоторые приемы, которые вы можете использовать, чтобы избежать некоторых проблем, которые вы ожидаете, я расскажу о паре в https://stackoverflow.com/questions/3395606...,, которая может дать вам некоторые идеи.Тем не менее, для такого рода модели данных, требующей динамической постприорной схемы с элементами мета-схемы, СУБД всегда будет неудобной.
Если вы готовы отказаться от ссылочной целостности, то вы все равноесть три подхода к рассмотрению.
Map / Reduce - в двух вариантах: распределенный, ориентированный на запись (думаю, MongoDB), и ориентированный на столбцы (думаю, Cassandra).Очень хорошо масштабируется, но у вас не будет SQL-подобного синтаксиса;присоединяется сосать;и соответствие вашей архитектуры вашим конкретным типам запросов имеет решающее значение.В вашем случае вы сосредотачиваетесь на сущностях и их атрибутах, а не на отношениях между самими сущностями, поэтому я, вероятно, рассмотрю распределенное хранилище, ориентированное на записи;но только если я ожидал, что нужно масштабировать дальше одного узла - они действительно очень хорошо масштабируются.
Хранение документов - технически в двух вариантах, но один из них - распределенная запись-ориентированная карта / уменьшение хранилища данных, рассмотренное выше.Другой - это перевернутый индекс (думаю, Lucene / Solr).НЕ пренебрегайте силой инвертированного индекса;они могут невероятно быстро разрешать непристойно сложные записи предикатов.То, что они не могут сделать, это хорошо обрабатывать запросы, которые включают корреляцию или большие реляционные объединения.Тем не менее, вы будете поражены невероятной гибкостью, которую дают вам достаточно сложные предикаты записей.
Graph-store - есть несколько вариантов, во-первых, это крупномасштабный, специальныйхранилище ключей-значений (думаю, DBM / TokyoTyrant);вторая - это пространство кортежей (думаю, Neo4j);третья - база данных RDF (подумайте, Сезам / Мулгара).У меня есть слабость к RDF, так как я помогал развивать мулгару, поэтому я не самый объективный комментатор.Тем не менее, если ваши ограничения масштабируемости позволят вам использовать RDF-хранилище, я считаю вывод, разрешенный денотационной семантикой RDF (редким среди параметров хранилища данных noSQL), неоценимым.