microsoft / GraphEngine

Microsoft Graph Engine
http://www.graphengine.io/
MIT License
2.19k stars 328 forks source link

Document HyperGraph Capabilities #328

Open buddha314 opened 3 years ago

buddha314 commented 3 years ago

I noticed in this issue https://github.com/microsoft/GraphEngine/issues/245 that GraphEngine is able to support HyperGraph structures. I can't find the documentation on these features. This SO Post shows that people cannot find a good HG engine.

TaviTruman commented 3 years ago

@buddha314 The Graph Engine does not directly support HyperGraphs by default while the default model mode of the GE is "PropertyGrpah"; however, you can model HyperGraph(s) directly using TSL. This is a significant capability as the GE will code generate typed DSL of the model - that means that you don't have to write any logic for accessing the graph. All of the low-level networking is anchored from the TSL generated coded workflow up to HTTP/RCP service endpoint. This one of the big differences between the traditional, conventional, and even contemporary Graph Databases.

As the GE is a general purposed advanced Graph-powered compute engine, you can use TSL to model many types of Graph data models and algorithms. You can start with LIKQ for search and exploration processing, and then you can roll your indexing scheme, semantic reasoning, and typical and or advanced search algorithms. The GE is very extensible as well as you can adorn interfaces for indexing, property-labeling, semantic marking and more; you can even use LIKQ to use rules for Adjancey List processing of Edges and Vertices. There's not a lot of documentation w.r.t advanced Graph implementations but you can model just about any type of Graph. I am working on creating documentation so as to teach and demonstrate how to use TSL to model Graphs and what the implementation of the algorithms looks like.

Quick Example: The basic idea of the Hypergraph concept is to consider such a generalization of a graph in which any subset of a given set may be an edge rather than two-element subsets.

We can define a HyperGraph like this:

GE TSL HyperGraph Model

What we need:

I'll plug-in the TSL source code here:

TaviTruman commented 3 years ago

@buddha314 I'll get around to posting the code on how to model HyperGraph in TSL later today or tomorrow; I'm currently working a couple of Graph Engine bugs.

TaviTruman commented 3 years ago

@buddha314 Hey Brain - I've been off working to resolve a few critical Graph Engine issues in the Service Fabric area, but I am getting back to this. I'm off the next week but will generate content to demonstrate multiple Graph algorithms and theories when I return in the week of October the 5th.

buddha314 commented 3 years ago

That would be wonderful, thanks!

TaviTruman commented 3 years ago

@buddha314 Hey Brian, I'm just getting back to this area of work, and with CoVID-19 changing so much of my day-to-day, things have slowed down a lot! I've authored a few white papers w.r.t Graph Data Schema modeling with Graph TSL and I'll post them next week,

TaviTruman commented 2 years ago

I got busy with coding for two start-ups; I will get back to doing this.

TaviTruman commented 1 year ago

@buddha314 Hey guys I finally have time to generate this type of content: https://github.com/InKnowWorks/RDF-Graph-and-HyperGraph

[HyperGraph]
cell struct RDFGraph
{
    List<CellId> RDFNodes;
    List<CellId> RDFHyperEdges;
}

[HyperGraph]
cell struct RDFNode
{
    string NodeId;
    List<CellId> OutgoingRDFHyperEdges;
    List<CellId> IncomingRDFHyperEdges;
    List<string> OutgoingPredicates;
    List<string> OutgoingObjects;
    List<string> IncomingPredicates;
    List<string> IncomingSubjects;
}

[HyperGraph]
cell struct RDFHyperEdge
{
    [HyperEdge]
    List<CellId> IncidentRDFNodes;
    string Predicate;
    string Object;
}