asami

Asami, the graph database https://github.com/threatgrid/asami
2021-03-17T20:37:34.000900Z

does anyone use asami in production, as a central db e.g. for re-frame or something similar?

2021-03-17T20:38:12.001100Z

is it even suitable for such purpose?

2021-03-17T20:38:59.001300Z

after a long time I am very disappointed with datascript and I am looking for something instead

quoll 2021-03-17T20:42:18.002500Z

When you say, “for re-frame” then do you mean that you have a re-frame app, and you want storage for the data, or are you specifically talking about re-frame structures that will be stored in the database?

quoll 2021-03-17T20:45:02.003100Z

Well, I don’t know much about re-frame, so I can’t comment 🙂

2021-03-17T20:45:22.003800Z

btw, thank you for your work @quoll, especially around documentation, nice to read

👍 1
quoll 2021-03-17T20:46:30.005Z

We had a simpler system based on Rum, where the data was all kept in Asami. But the UI has been pulled out completely and given to a team who does JavaScript. We’re now building an engine that stores everything in Asami, and the engine provides an interface that the JS team can talk to

2021-03-17T20:47:42.005300Z

sounds cool

quoll 2021-03-17T20:48:01.005400Z

Some days I just can’t code. Or I want someone else to use a feature, and I know that they’ll never even look at it if it’s not documented. So I write docs 🙂

quoll 2021-03-17T20:48:54.006400Z

I think there’s over 100k deployments now, so for the features that the engine team are using it’s holding up well

quoll 2021-03-17T20:49:33.007Z

I’m actually on that engine team, but as Asami got used more and more, I’ve moved to focusing on it

2021-03-17T20:50:19.007400Z

I find it surprising that asami in the clojure world is still somewhere in the shadows of datascript

quoll 2021-03-17T20:51:41.007800Z

Well, DataScript has been around a long time, and has been promoted at Clojure/conj

quoll 2021-03-17T20:52:03.008100Z

People have heard about it

2021-03-17T20:53:58.008300Z

I first heard about Asami when watching your talk at ClojureD 2019

2021-03-17T20:54:13.008500Z

great talk

quoll 2021-03-17T20:55:07.008700Z

Thank you 🙂

quoll 2021-03-17T20:55:55.009400Z

The idea of it was that I wanted to give developers (who like to know how things work) a sense of what graphs are, and how a graph database does it

2021-03-17T20:57:05.009600Z

there's a lot of activity around graphs in clojure recently

quoll 2021-03-17T20:57:27.009800Z

I’ve noticed!

quoll 2021-03-17T20:57:44.010200Z

If I’d known all of this 5 years ago then I wouldn’t have bothered 🙂

2021-03-17T20:59:51.012Z

it would be a great loss for us

quoll 2021-03-17T21:02:40.014800Z

When we started Mulgara, we thought it was a bit of effort, but was not too big an effort. But then the more we did, the more we needed to do. Several years later, the owner of the company said that if he’d known what it would involve, then he never would have committed to it. Because of that, I never wanted to build another complete database from scratch. I knew how much effort that entails. But back in 2016, when I was asked if I could implement my own open source database for Naga (and not rely on Datomic), I figured it would be OK, because it only needed to be in memory, and it only needed to handle storage and join operations. I did that in about a day. Then I decided that it needed a query optimizer (again… easy, because of so few operations), and that only took half of a Saturday. It seemed so simple

quoll 2021-03-17T21:07:12.015200Z

The query engine (it did not support a q function… only a :where clause and projection to the required columns) and query planner were here: https://github.com/threatgrid/naga/blob/d36cb2a44d38c27669a52b6b3f421d9db3bc6a96/src/naga/storage/memory/core.clj

quoll 2021-03-17T21:07:19.015500Z

That’s 100% of it

2021-03-17T21:09:40.015700Z

It was nice to have a few words with you Paula

2021-03-17T21:10:06.015900Z

I'll definitely stop by again, but I have to run.

2021-03-17T21:10:11.016100Z

thx!

👋 1