Каковы достоинства и недостатки triplestore базы данных?

Чтобы Enumerable.Distinct работали для вашего типа, вы можете реализовать IEquatable и предоставить подходящие определения для Equals и GetHashCode, в противном случае он будет использовать реализацию по умолчанию: сравнение для равенство ссылок (при условии, что вы используете ссылочный тип).

Из руководства:

Метод Distinct (IEnumerable) возвращает неупорядоченную последовательность, которая не содержит повторяющихся значений. Он использует компаратор равенства по умолчанию, Default, для сравнения значений.

Средство сравнения по умолчанию, Default, используется для сравнения значений типов, которые реализуют универсальный интерфейс IEquatable. Чтобы сравнить пользовательский тип данных, вам необходимо реализовать этот интерфейс и предоставить собственные методы GetHashCode и Equals для этого типа.

В вашем случае, похоже, вам просто нужно сравнить идентификаторы, но вы также можете сравнить другие поля в зависимости от того, что для вас означает, что два объекта «одинаковы».

Вы также можете рассмотреть возможность использования DistinctBy из morelinq .

Обратите внимание, что это только LINQ to Objects, но я предполагаю, что это то, что вы используете.

Еще один вариант - объединить GroupBy и First:

 var query = // your query here...
    .GroupBy(x => x.Id)
    .Select(g => g.First());

Это также будет работать, например, в LINQ to SQL.

6
задан M. Dudley 14 June 2009 в 22:50
поделиться

2 ответа

Я предполагаю, что вы спрашиваете о сохранении троек (и, возможно, графов через квадраты), где хранилище является либо «собственным» хранилищем троек (например, TDB ) или реляционная база данных с наложением тройного хранилища (например, SDB ).

Если вы подробно изложите свои требования, я уверен, что участники Stack Overflow могут предложить более конкретный ответ, но только в первую очередь в моей голове:

  • Собственные тройные хранилища обычно имеют лучшую производительность, когда размер набора данных становится очень большим. См. некоторые цифры из W3C .
  • Собственные хранилища троек могут предлагать рассуждения / логические выводы в магазине (как семантический инструментарий Oracle, хотя он не полностью поддерживает SPARQL).
  • Тройки в СУБД может быть "легко" интегрированы в традиционные инструменты отчетов (например, Jasper Reports), поскольку вы можете запрашивать их с помощью SQL.
2
ответ дан 17 December 2019 в 00:13
поделиться

Я ' m создатель Redland , который включает собственные тройные хранилища на C, плюс я использовал некоторые системы Java, такие как Jena и Sesame.

Трудно сказать больше, не зная, в чем ваша проблема, но в целом нативные тройные хранилища работают лучше, если ваше проблемное пространство / шаблон запроса более «графичен», чем «объектно». Объектный означает, что вы склонны всегда манипулировать - каждый раз устанавливать / получать один и тот же шаблон данных - в этом случае вы также можете использовать ORM или другое объектно-реляционное сопоставление и фиксированную схему. Если ваша проблема и схема более динамичны - «Graphy» - вы можете извлечь выгоду из подхода с тройным хранилищем, при котором проще перемещаться по данным, чем обычно в мире СУБД (также называемых соединениями).

Конечно, также есть документ-подход тоже такой как CouchDB, но это '

5
ответ дан 17 December 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: