-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
design: Sub-Graph Modules (sgm) #54
Comments
That's why labels are like tags. You can add them on the fly and they are useful to tag things, group them or denote status etc. So you don't have to create a complex ontology structure just tag your nodes with the labels that represent the roles they play. |
Hey there, @halcyondude! Congrats on the awesome work and research you're doing! I'm using a lot of your research to guide my own, which I started a while back for a Filecoin Plus project. Through my research, I'm trying to follow similar concepts you've described, and I feel like the "Sub-Graph Modules" concept would benefit from the Apollo Federation architecture. Do you know about it already? If not, taking a look may be worth it! Here are some starting points:
One thing, though, is that it seems Neo4j doesn't readily integrate with it, but it seems easy to make it do so. Here's a repository from the Apollo team that demonstrates it working with Neo4j: https://github.com/apollosolutions/neo4j-subgraph |
Hi there! I had a look at Apollo Federation, and while it's pretty cool, I'm not sure it's the best fit here, most specifically because subscriptions are not supported. However much of the conceptual information on Schema composition is quite relevant and makes sense. For now to keep things simple, and not have another layer of indirection, planning to use graphql fragments and a simple directory/manifest approach. Another concern I had on using Apollo Federation is the impact on the client/query layer, as well as requiring a gateway, the supergraph/subgraph idiom and such to be part of the runtime. In the ideal case (I posit) the compositional model for the data layer is immaterial to the final data model without coupling. |
@halcyondude That's great! Are you planning on centralizing everything into a single database vendor (in this case, Neo4j for now)? |
Using Neo4j for the time being, primarily due to existence of APOC and the GDS libraries, and free availability of Neo4j Desktop as a native experience across platforms, with a low[er] barrier to entry for new contributors. As the GraphQL javascript library does all the translation of GraphQL --> OpenCypher, really the standardization is on OpenCypher, which is implemented by other Graph Databases as well (https://opencypher.org/projects) |
Recently published, apollo's stack just leveled up in terms of oss offerings... It's likely that after a more detailed review we'll move forward with some of these components. |
Update, after findings in #4 The the SGM's implemented (initially) are exposed to the supergraph via GraphQL endpoints. This provides strong typing, and interoperability with a deep canon of existing libraries and algorithms, inclusive of ontology/taxonomy/semantic frameworks, as well as documentation and visualization tools. A variety of back-end database stores can be used behind that interface. In my view, a graph database w/ the neo4j-graphql javascript library is compelling as it removes the need for writing Resolvers, handling sorting/filtering/pagination, and authoring Mutations. Being able to drop into Cypher via |
Sub-Graph Modules
Goals
kind:
's of things (e.g.Pod
,Deployment
,Ingress
) part of a "built-in" data model, then a custom mechanism for extensibility (CRD's). Instead make the core data model structured with the same compositional mechanisms.Tasks
implement inheritance model (see below)
implement dependency mechanism
implement core data model as { sgm-base, sgm-cncf, sgm-xyz, ... }
Object
)Sub-Graph Modules: Design and Architecture
Types of Sub-Graph Modules (SGM)
Each of these is an Interface, acting as a base class with shared properties. Reasons to structure in this way include:
Each module shall have:
Taking this approach facilitates creation of a rich set of capabilities impacting model training, CI, and developer experience.
By using snapshots of the graph (Graph Projections TODO doc link) in a manner similar to virtual machine snapshot trees (esx, hyper-v, ...), CI can
We'll also benefit from a sustainable, portable, useable data model that is documented.
(TODO: update w/ final set)
. ├── blogs │ └── sgm-blogcncf ├── boards │ ├── sgm-ghdiscuss │ └── sgm-stackoverflow ├── core │ └── generated ├── corp │ ├── sgm-crunchbase │ └── sgm-yahoofinance ├── email ├── packages │ ├── sgm-brew │ ├── sgm-choco │ ├── sgm-crate │ ├── sgm-deb │ ├── sgm-deno │ ├── sgm-go │ ├── sgm-maven │ ├── sgm-npm │ ├── sgm-pip │ └── sgm-rpm ├── rtc │ ├── sgm-discord │ └── sgm-slack ├── social │ ├── sgm-linkedin │ └── sgm-twitter ├── threats │ └── sgm-nist └── learning └── sgm-youtube
ACTIVE DEVELOPMENT
Closely related to this issue is: #4 (branch)
How GraphQL Interfaces Work
https://neo4j.com/docs/graphql-manual/current/type-definitions/interfaces/#_directive_inheritance
https://neo4j.com/docs/graphql-manual/current/type-definitions/interfaces/#_overriding
Core Data Model
The text was updated successfully, but these errors were encountered: