TomGrozev

TomGrozev

ArangoXEcto - ArangoDB fully integrated graph database adapter for Ecto

Hello all,

Today I am excited to announce ArangoXEcto, an all-in-one ArangoDB adapter for Ecto, has reached version 2.0. This included a lot of reworks of functionality and now has (what I would say is) a pretty good integration with standard Ecto functionality.

If you don’t know what ArangoDB is, it is a powerful graph database that is performant, scalable and feature rich. One of the powerful features of ArangoDB is that it can act as a regular NoSQL database as well as a graph database and is designed for enterprise uses as well (ai bandwagon anyone?).

As far as I am aware this may be the most integrated a graph database has been into Ecto, i.e. without having to use excessive non-Ecto functions, however, I could be wrong on this so keen to hear if anyone else has tackled this challenge.

The journey
Before I started my journey in Elixir I had used ArangoDB with Python and when I discovered (and fell in love with) Elixir I immediately wanted to use ArangoDB with Elixir. When I had a look around for packages I was disappointed to find that there was no package that integrated with Ecto (at least above version 2). So, being the good citizen of the open source community that I like to think I am, I decided to write my own ArangoDB adapter that directly integrated with Ecto.

To get started I drew upon mpoeter’s conversion of Ecto queries to AQL (ArangoDB’s query language) and used the amazing Arangox package for database connections. So thank you to both of the aforementioned for their contributions.

What I had embarked on was a lot more work than my naive self had first bargained for. As it turns out, it is not so easy to get a graph database to function with a tool that was originally designed for relational databases. However, after many iterations of functionality I believe I have finally gotten it to a point where using a graph database with Ecto is quite seamless.

Yes, there are some edge cases and some asterisks on some functionality but as it stands everything works pretty well!

Going forward
Looking to the future I would like to do a few things:

  1. Look into furthering graph database support directly into Ecto through a PR (e.g. supporting multiple queryables on associations and more). At the moment some functionality is re-implementations of code already in the Ecto codebase and that can be problematic for maintainability.
  2. Further develop the named graph functionality
  3. Implement some of the more advanced ArangoDB functionality (i.e. some more of the enterprise features)

Please let me know your thoughts on the library.

https://github.com/TomGrozev/arangox_ecto

Where Next?

Popular in Announcing Top

danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29377 241
New
ostinelli
Let’s write a database! Well not really, but I think it’s a little sad that there doesn’t seem to be a simple in-memory distributed KV da...
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 43622 214
New
Eiji
ExApi is a library that I’m developing now and hope release soon This library will allow to: list all apis list all api implementation...
New
tmbb
I’ve been working on two packages (not on hex.pm yet) to build admin interfaces for phoenix apps: bureaucrat - which contains a bunch ...
New
mbuhot
Leverage Open Api 3.0 (Swagger) to document, test, validate and explore your Plug and Phoenix APIs. Generate and serve a JSON Open API ...
New
Jskalc
Hi! Today, after a couple weeks of development I’ve released v0.1 of LiveVue. It’s a seamless integration of Vue and Phoenix LiveView, i...
New
scohen
Lexical Lexical is a next-generation language server for the Elixir programming language. Features Context aware code completion As-you...
New
woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New
wfgilman
I’ve cleaned up and open sourced three financial libraries I was using for my company. They are bindings for the APIs of these three comp...
New

Other popular topics Top

danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29377 241
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
274 41539 114
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 39297 209
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New

We're in Beta

About us Mission Statement