Why not use something else? I wanted to build something from scratch.
What you've built with ArcadeDB is definitely impressive, but much larger scale that what I was trying to accomplish with this. Like the repo says, think sqlite but for graph dbs :)
Not comparable. Similar to Neo4j vs LatticeDB. Lattice's goals are simplicity, single file, super easy to start using. Surreal supports embedded mode, but my understanding is it is not a single file. Surreal supports a huge number of data models, Lattice is more focused. Surreal also appears to have a company behind it. Lattice is just me.
If you are looking for something lightweight and simple, choose Lattice. If you are an Enterprise looking for hosting, Enterprise support, and maybe a database that can handle all of your needs instead of a specific one, pick SurrealDB.
I hadn't heard of SurrealDB until your comment though, so take what I have to say here with a grain of salt.
Thanks - appreciate the feedback! I wanted the README to be something you could quickly glance at, get a sense of the project and whether it's what you are looking for, and be done with it.
I am in the final stages of adding this based on your comment. Just wrapping up doc updates and will push a new release with hot copy functionality tonight!
Within the same process it's enforced at the db level. After reviewing the code more I see we don't have a mechanism in place to manage safety across processes. Will add a file lock mechanism tonight. Great call out!
In general though, the goal for this was single writer multiple readers. That was a design decision to keep things simple.
The permissions question is interesting. I think the answer depends on context. One approach would be to create some edge types `hasAccessTo` and `accessibleBy` that connect a user to a node. Then I'd create an edge type `childOf`. The rest is business logic. Permission checks can just traverse up to the first root node with permissions. The downside is this is all business logic, so can't really look at the database and understand this is how it works. Depending on the database you could create a function that returns permissions for any node, that encapsulates this logic.
Anyways, thanks for checking it out! Really appreciate it. Good luck with your project!