Live data from Hacker News

Asami: A flexible graph store in Clojure

github.com

1–10 of 22 posts

Re: Asami: A flexible graph store in Clojure

#3
I just spent ten minutes looking through the repo. I like how the query language is similar enough to Datomic’s to have an easy learning curve. I wish I could push a magic button and have this in Common Lisp (where I usually just use SQLite as an easy to use data store).

Re: Asami: A flexible graph store in Clojure

#4

I just spent ten minutes looking through the repo. I like how the query language is similar enough to Datomic’s to have an easy learning curve. I wish I could push a magic button and have this in Common Lisp (where I usually just use SQLite as an easy to use data store).

The main problem is that I don't have a lot of time on it right now, though I'm trying to do more.

I don't actually know Common Lisp, though it seems to work nicely when compiled to binary via Graal, so maybe there's some possibilities of integration using that approach?

Re: Asami: A flexible graph store in Clojure

#5

> schema-less It's really good to see a scalable database that did schemas a bit like typescript does types. Opt-in explicit schema, try to infer schemas when possible and allow schema-less if I ask for it. Hmm, I suppose elasticsearch does have this.

Hmmm, I wouldn't call it scalable. The storage is pluggable though, and it can be made to scale that way. But it holds a lot of data locally, and seems to do a reasonable job. "Loading" means indexing everything, so nothing is available until the index is done, and that can take a few minutes if you're trying to load GBs. However, it's usually very fast to query. I don't have an explicit schema yet, though I'm working on adding something like Datomic's schema as an option. (this is important for things like upsert, or just updating entity attributes instead of appending new attributes)

Re: Asami: A flexible graph store in Clojure

#6

I just spent ten minutes looking through the repo. I like how the query language is similar enough to Datomic’s to have an easy learning curve. I wish I could push a magic button and have this in Common Lisp (where I usually just use SQLite as an easy to use data store).

An idea that pops up more and more often in my head is to create a SQLite wrapper library that basically treats SQLite like Datalog.

I know way too little about Datalog, but it goes something like this:

1. create helper functions to create/alter/drop tables.

2. create helper functions for insert/select/update/delete queries, etc. Probably with the same syntax as in Datomic / Asami / etc.

3. each table its name would be a Datalog "attribute", and would have 2 columns: the "id" and the "value". "id" would be indexed, "value" would be a value or a foreign key to another table.

I guess writes would be slow if everything you insert into the DB is indexed, not sure what the other downsides would be.

Re: Asami: A flexible graph store in Clojure

#7

I just spent ten minutes looking through the repo. I like how the query language is similar enough to Datomic’s to have an easy learning curve. I wish I could push a magic button and have this in Common Lisp (where I usually just use SQLite as an easy to use data store).

An idea that pops up more and more often in my head is to create a SQLite wrapper library that basically treats SQLite like Datalog. I know way too little about Datalog, but it goes something like this: 1. create helper functions to create/alter/drop tables. 2. create helper functions for insert/select/update/delete queries, etc. Probably with the same syntax as in Datomic / Asami / etc. 3. each table its name would…

It's not like datomic claims to be lightening fast, it's not. The real problem is if you want to support the historical queries "as_of()", which is very difficult to do efficiently with only B-tree indexes. So you're either left maintaining your own indices as tables or externalizing it to something else. I think the latter would actually be a pretty ok option if your dataset fits entirely in memory (though... for historical queries it will grow much faster than a normal database).

Regardless, I have a partial attempted implementation of this on top of SQLite using Python: https://git.sr.ht/~chiefnoah/quark

No query engine, I didn't get that far.

Re: Asami: A flexible graph store in Clojure

#8

I just spent ten minutes looking through the repo. I like how the query language is similar enough to Datomic’s to have an easy learning curve. I wish I could push a magic button and have this in Common Lisp (where I usually just use SQLite as an easy to use data store).

An idea that pops up more and more often in my head is to create a SQLite wrapper library that basically treats SQLite like Datalog. I know way too little about Datalog, but it goes something like this: 1. create helper functions to create/alter/drop tables. 2. create helper functions for insert/select/update/delete queries, etc. Probably with the same syntax as in Datomic / Asami / etc. 3. each table its name would…

Did you see the Show HN post announcing cozo 10 days ago?

https://news.ycombinator.com/item?id=33518320

https://github.com/cozodb/cozo

Note: there was a fair amount of discussion about the license; the author eventually switched it to MPL2.

Re: Asami: A flexible graph store in Clojure

#9

Earlier quoted context omitted.

An idea that pops up more and more often in my head is to create a SQLite wrapper library that basically treats SQLite like Datalog. I know way too little about Datalog, but it goes something like this: 1. create helper functions to create/alter/drop tables. 2. create helper functions for insert/select/update/delete queries, etc. Probably with the same syntax as in Datomic / Asami / etc. 3. each table its name would…

It's not like datomic claims to be lightening fast, it's not. The real problem is if you want to support the historical queries "as_of()", which is very difficult to do efficiently with only B-tree indexes. So you're either left maintaining your own indices as tables or externalizing it to something else. I think the latter would actually be a pretty ok option if your dataset fits entirely in memory (though... for hi…

Not sure what you mean here? as_of() is easy to do efficiently, so long as you have tree indexes (it doesn't really matter what type of tree, though fractal trees would not be good). But you need direct access to the tree, rather than having an index that's built using a tree, since then you can't build the phases.

Re: Asami: A flexible graph store in Clojure

#10

Earlier quoted context omitted.

An idea that pops up more and more often in my head is to create a SQLite wrapper library that basically treats SQLite like Datalog. I know way too little about Datalog, but it goes something like this: 1. create helper functions to create/alter/drop tables. 2. create helper functions for insert/select/update/delete queries, etc. Probably with the same syntax as in Datomic / Asami / etc. 3. each table its name would…

It's not like datomic claims to be lightening fast, it's not. The real problem is if you want to support the historical queries "as_of()", which is very difficult to do efficiently with only B-tree indexes. So you're either left maintaining your own indices as tables or externalizing it to something else. I think the latter would actually be a pretty ok option if your dataset fits entirely in memory (though... for hi…

I'm talking about Datalog, I mentioned Datomic purely in the context of syntax.

And to sum up what I know about Datalog, it's basically just this article (not reference material, but it got me interested in the concept), plus some light wikipedia-ing: https://www.instantdb.com/essays/datalogjs

Edit: I think you added the part with your git repo after I wrote this. Looks cool, could you add a license file to it?

Post reply on HN