[HN Gopher] Asami: A flexible graph store in Clojure
___________________________________________________________________
Asami: A flexible graph store in Clojure
Author : tosh
Score : 105 points
Date : 2022-11-16 12:19 UTC (2 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| worldsayshi wrote:
| > 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.
| quoll wrote:
| 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)
| mark_l_watson wrote:
| 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).
| quoll wrote:
| 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?
| harryvederci wrote:
| 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.
| dms92n1bx wrote:
| There is (now unmaintained) project called Mentat [0] from
| Mozilla.
|
| [0] https://github.com/mozilla/mentat
| packetlost wrote:
| 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.
| harryvederci wrote:
| 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?
| packetlost wrote:
| Got it. Yeah, datalog is cool. I really like it (if that
| wasn't obvious from my attempt at implementing it). While
| not built on SQLite, this project has caught my attention
| recently: https://github.com/cozodb/cozo
|
| It's built on RocksDB and has slightly different query
| syntax (supposedly to be more similar to Python's, as a
| primary target usecase is within Jupyter notebooks).
| Check it out!
| quoll wrote:
| 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.
| packetlost wrote:
| Right, if you have direct access to the tree it's
| possible and not really inefficient at all (a modified
| B+Tree would be my first pick, but I digress). Part of my
| problem was I was trying to offload as much of the work
| to SQLite as possible. I think if I were to go back and
| try again, I would make it a bit further :)
| michaelsbradley wrote:
| 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.
| fiddlerwoaroof wrote:
| Do you happen to know of any good resources for implementing
| datalog? I've thought about writing something similar in Common
| Lisp several times, but it's hard to find a good introduction
| here.
___________________________________________________________________
(page generated 2022-11-18 23:01 UTC)