Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support multiple backends. #32

Open
wants to merge 35 commits into
base: master
Choose a base branch
from
Open

Conversation

whilo
Copy link
Contributor

@whilo whilo commented Dec 30, 2017

Hi,

I have finally ported datascript to the hitchhiker-tree, all tests pass and it works with a non-async port of the hitchhiker-tree (which considerably simplifies profiling and debugging).
https://github.com/whilo/datascript/tree/hitchhiker_tree_support
Query performance is ok for my small queries on the REPL (~ 3x-5x times slower than the bt-set in datascript itself), but it is WIP and still not ported to core.async. The GC of the hitchhiker-tree is also still missing. I would like to hear your opinion on these efforts, both for the tree and, if you are interested, on datascript. I still have to port the cljs tests and maybe this dynamic binding in core.cljc for *async-backend* is not optimal(?).

Best,
Christian

whilo added 30 commits March 23, 2017 00:14
Preparing first automatic cljs test.
This has a heavy payload of 1 MiB, working around the lacking async
support in test-check:
https://dev.clojure.org/jira/browse/TCHECK-128
@dgrnbrg
Copy link
Collaborator

dgrnbrg commented Feb 17, 2018

Hey, this is really exciting! I'm sorry for not responding sooner--I've been incredibly busy with work.

Would you mind giving me a walkthrough in terms of how to understand this PR? Like, what are the concepts you've altered to make this work, what order should I read through the changes, etc.

Also, I noticed that 2 tests are failing. I would be happy to help you identify what might be the issue, if you could start by giving my a tour of this change.

I always hoped that one day the hitchhiker tree would be integrated with datascript--I'll do what I can to land these changes and support in whatever way I can.

@whilo
Copy link
Contributor Author

whilo commented Apr 21, 2018

I have basically just made the core.async macros optionally no-ops, so we would recover the old hitchhiker-tree semantics. I did this to have easier profiling, because I was trying to make the query engine of datascript perform competitively to Datomic, which worked out in the end. (I had a really stupid thought error...). Since namespaces are not parametrizable, I am not sure how to exactly make the async backend pluggable. I opted for a dynamic binding, but this needs to be bound before the hitchhiker-tree namespaces are evaluated (macro-expansion time). Do you have any suggestions on that? I would not merge before this is addressed, I just wanted to get some input from you first.

Regarding datahike, I think it might be pretty interesting to try with your redis-backend, which I have not managed to map yet. I have also thought about running a datahike instance in a BFT tolerant blockchain-like system to facilitate neutral multiparty infastructure management (e.g. supply chain, setups of datacenter instances etc.). Another thing that I would like to do is move away from my CRDT-based distributed approach to a linearizable system with datahike first and then do a relaxation on parts of the schema with conflict-resolution mechanisms (e.g. causally consistent grow-sets or last-writer-wins semantics) and stream these through factui or reactive dataflow into frontends with react-native. This is a programming model that looks fairly perfect to me.

@dgrnbrg
Copy link
Collaborator

dgrnbrg commented Apr 23, 2018

Thank you for your guidance! If you're still interested in getting this merged (I am!), I'll be able to take a look after this week--I'm speaking at a conference this Friday & Saturday, so next weekend I'd be able to take a first pass through the review.

@whilo
Copy link
Contributor Author

whilo commented May 19, 2018

Hey David. I was also super busy with a paper deadline and some business related stuff. I have just updated the codebase again a bit, but I am sometimes hitting a weird error in the konserve backend in its generative test. I would love to hear your feedback on how to make the async backend pluggable and then take a few days off to clean things up a bit before a merge. If you have some cool ideas how to combine datalog with the hh-tree or nice JVM backend infrastructure, feel free to brainstorm as well. I have atm. the idea that datahike could actually allow a diverse set of DB objects on different index datastructures with different tradeoffs, while allowing composable queries over the whole infrastructure (including client-side queries). It is a bit crazy, but this is what I would love to have and the best way to compose systems I can come up with right now...

whilo added 3 commits May 23, 2018 14:05
The lookup in konserve is not hitting a blocking core.async <!! anymore.
Provide missing binding file.
@whilo
Copy link
Contributor Author

whilo commented Sep 4, 2018

The error in the test was an edge case error in the testing code, so everything is fine. I am currently writing up an explanatory blog post about the hh-tree for our blockchain project which follows losely your presentation. If you are interested I can give it to you to read beforehand. You are also welcome to join at any point of course. At the moment we mostly coordinate through a telegram chat.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants