My question is about the suitability of neo4j for accomplishing what I need. I feel like it may be, but some uncertainty regarding neo4j's capabilities is making me second-guess it. You can skip ahead to "Here's where I start to wonder..." if the context/background below is too much.
In a nutshell, I need to establish the database framework for kitting out different fleets of vehicles, with full sourcing and attribution of data. It'll have a front-end where a user can select from all of the many options to "build" vehicles and then add them to some number of fleets. In the end, I'd have a DB of organizations, fleets they own, and the composition of each of those fleets all the way down to the specific vehicle with their equipped systems, performance data, and other relevant info. The user would be able to view and edit the data, and other software would be able to query the db for inputs to run simulations and do analysis.
I need to be able to do things/answer questions like (but not limited to):
Here's where I start to wonder if Neo4j can do it:
I don't think I can just have tables of attribute values because each attribute only supports having one value, and there are many instances of conflicting information that I have to keep track of. Also, classification isn't a simple attribute. There are many types of controlled information, such as organizational (Tesla Proprietary vs Honda Proprietary), or Personally Identifiable Information (PII), or confidential legal documents. I have to be able to associate an organizational node (e.g. Tesla) with a classification level node (e.g. proprietary) to declare what a particular datum's classification is (Teslar Proprietary). It also impacts who the data is releasable to, which we have to keep track of so we can dynamically control who gets to see what based on their credentials (e.g. a Tesla employee is allowed to see Tesla Proprietary data but not Toyota Proprietary data) and therefore not get in massive legal trouble.
My initial research seemed to eliminate relational databases as a whole as an option and indicated that neo4j may be able to support what I need, but I'm not sure it does. The closest thing I've been able to find is this post (in which the answer is "no," but I'm not quite sure if we're asking the same thing or not.
I'm pretty new to database design and completely new to neo4j. My background is primarily in modeling and simulation, but I'm frothing at the mouth for an opportunity to establish a central DB my many models can query instead of having to hand-jam all this crap into each one separately, introducing plenty of risks and wasting time.
Long post, I know, but I'd really appreciate any feedback as I get started on my databasing journey! Thank you very much!
Great questions! As a Neo field engineer with a background of 20+ years providing data solutions to global automotive OEMs and Tier-1s, I can say that what you're asking for fits very well into the graph domain. The relationships between the various objects is pretty straightforward. As is the role-based access control to ensure that people do not see data to which they are not permitted. I think that a knowledge graph that brings together many different sources of data will be ideal here rather than a limited search engine similar to what you'd use with Elastic search. Check out some of our public docs on this topic: