Procurando um GraphDB maduro e escalonável com vinculação .NET ou C ++
-
28-10-2019 - |
Pergunta
Meus requisitos básicos de um GraphDB:
- Maduro (pronto para produção)
- Vinculação de linguagem nativa .NET ou C ++
- Escalabilidade horizontal: ambos
- Redundância e fragmentação de dados automatizados
- Algoritmos de gráfico distribuído / execução de consulta
Atualmente, desqualifiquei o seguinte:
- InfiniteGraph: sem ligação de linguagem C ++ / .NET
- HyperGraphDB: sem ligação de linguagem C ++ / .NET
- Microsoft Trinity: não maduro
- Neo4j: não distribuído
Não tenho certeza sobre a escalabilidade do seguinte:
- Sparsity DEX
- Franz Inc. AllegroGraph
- Sones GraphDB
Achei as informações disponíveis sobre os recursos de escalabilidade horizontal bastante gerais.Acho que há boas razões para isso.
Qualquer informação seria apreciada.
Solução
Infelizmente, seus requisitos básicos já estendem o conhecimento geral atual de gráficos - mesmo na academia. Nenhum banco de dados de gráfico puro listado será capaz de satisfazer todas as suas necessidades. Algoritmos de grafos distribuídos que estão cientes de grandes gráficos distribuídos, mas interconectados ainda são um grande problema de pesquisa. Portanto, para a sua aplicação, pode ser melhor encontrar um banco de dados de gráficos, pilha de processamento de gráficos ou RDF-Store e implementar as partes ausentes por conta própria. Quando sua aplicação é principalmente de processamento de gráfico transacional online (OLTP) (leitura / gravação pesada) com foco nos vértices e você pode renunciar aos algoritmos distribuídos por um momento, então use um destes:
- Neo4j
- OrientDB
- DEX
- HyperGraphDB
- InfiniteGraph
- InfoGrid
- Microsoft Horton
Quando é mais processamento analítico online (OLAP) (principalmente lido) ainda com foco nos vértices e distribuição realmente importa então:
- Apache Hama (projeto em estágio inicial)
- Microsoft Trinity (projeto de pesquisa)
- Golden Orb (bom, mas apenas Java)
- Signal / Collect (http://www.ifi.uzh.ch/ddis/research/sc, mas um projeto de pesquisa)
Ou seu foco está mais nas bordas, raciocínio lógico / correspondência de padrões e você precisa ou melhor pode conviver com uma distribuição em um nível de borda como na Web Semântica e usar um destes RDF- / Triplo- / Quadstores:
- AllegroGraph (ok, eles são um híbrido de armazenamento de graphdb / rdf;)
- Jena
- gergelim
- Stardog
- Virtuoso
- ... e muitas outras lojas RDF
Bons pontos de partida podem ser DEX ou Neo4j: Se você está procurando um kernel graphdb bom e realmente rápido para C ++, DEX pode ser o melhor, mas você terá que implementar muitas coisas de rede e distribuição por conta própria. Neo4j tem muita distribuição e tolerância a falhas, mas no momento mais em um nível de fragmentação de vértice e seu kernel é Java. Para ideias e inspiração sobre a implementação de algoritmos de grafos distribuídos, talvez dê uma olhada em Golden Orb e Signal / Collect. Uma abordagem alternativa pode ser começar com AllegroGraph ou Stardog. Especialmente o AllegroGraph pode ser um pouco complicado no início, até que você seja adotado por sua maneira de pensar. Stardog ainda é jovem e Java, mas rápido e já bastante maduro.