structr / structr

Structr is an integrated low-code development and runtime environment that uses a graph database.
https://structr.com
GNU General Public License v3.0
783 stars 156 forks source link

Feature Request: Support other Graph DBs and Query Languages #510

Open robertoandrade opened 7 years ago

robertoandrade commented 7 years ago

Ie: I'm interested in using this and even help contribute to abstracting the underlying code to be able to talk to Apache TinkerPop Graph DB implementations such as Titan/JanusGraph using Gremlin query language (even though they also support CQL).

amorgner commented 7 years ago

Sounds interesting!

Please have a look at https://github.com/structr/structr/tree/master/structr-db-driver-api, this is the API to implement.

At the moment, the only working implementation is the Neo4j Bolt driver: https://github.com/structr/structr/tree/master/structr-neo4j-bolt-driver

poojits commented 6 years ago

This would be really powerful if there is an implementation of the structr-db-driver-api which uses Gremlin so that structr can be used for https://aws.amazon.com/neptune/

eric-schleicher commented 6 years ago

^ yes that sounds very interesting

cmorgner commented 5 years ago

@robertoandrade There have been many changes towards supporting other database implementations recently, please have a look at the in-memory-driver branch.

We're more than happy to support a Gremlin driver implementation, is there anything we can do to help you?

mingfang commented 4 years ago

I'm interested in using Structr with ArangoDB https://www.arangodb.com

vigorouscoding commented 3 years ago

Currently Structr supports Neo4j (v3.5), has an in-memory driver and an experimental driver for MemgraphDB. The recommended driver for production systems is the Neo4j driver.

We are working on improving the current drivers and adding more. Currently we are focused on upgrading the Neo4j driver to support the latest version

mingfang commented 3 years ago

I'm stuck with my ArangoDB implementation. It's not able to even get pass initialization. The SchemaService creates a bunch of nodes during initialization but it apparently is not creating all the relationships. I set a breakpoint in Node.createRelationshipTo() and it's only called a handful of time. Also my RelationshipIndex is not called at all. Does Structr expect "implicit" relationships?

mingfang commented 3 years ago

Can someone please explain how relationships are created? In particular, in here https://github.com/structr/structr/blob/master/structr-core/src/main/java/org/structr/schema/export/StructrTypeDefinition.java#L1067

I see that schemaNodes are created then followed by schema properties created, but I don't see relationships being created for them.

mingfang commented 3 years ago

NVM I figured it out.

mingfang commented 3 years ago

I'm happy to report that I've successfully gotten Structr to work with ArangoDb ~90% of time. There are a couple of neo4j specific unit tests are failing. Also there are neo4j specific UI components that would need to change. I'm sure to find more things broken as I use it.

amorgner commented 3 years ago

Hi @mingfang, sounds really great what you have achieved. Sorry for the late answer, we were pretty busy with the release of 3.6.0 and 3.6.1.

We have put support for other databases on hold until GQL is supported as a new standard by many vendors, but of course we want to support your efforts on ArangoDB support. If you need help on specific topics, please don't hesitate to ask, or just submit a PR.

By the way, really impressive what you have done regarding the partial compilation. We are currently reviewing your PR and hopefully we can merge it.