clojuredesign-podcast

leifericf 2022-04-08T10:55:13.300739Z

Another idea for a possible podcast episode in the future πŸ™‚

neumann 2022-04-11T17:59:23.804649Z

@leif.eric.fredheim Yes and no. Akka and actors is what really got me into Scala about 13 years ago. What I have is more like a reactive dataflow graph, where each node is the graph is like an Erlang "process", but a node cannot hold any references to any other node. Just messages in and then out again. I need to share out my latest version and then put some material together about it.

πŸ‘ 1
leifericf 2022-04-11T18:04:13.383379Z

@neumann Cool! So it's kind of like a https://en.wikipedia.org/wiki/Directed_acyclic_graph, where each node is kind of like a function that just transforms the data and sends it along to the next process? Sort of like a big pipe operator but with processes instead of functions. I'll have a look when you get around to sharing it!

neumann 2022-04-11T18:09:30.355999Z

Yup. It's a DAG pipeline.

πŸ‘ 1
leifericf 2022-04-11T19:38:41.172639Z

Nice! We use that concept at work for data engineering, but through visual tools like https://www.matillion.com, https://docs.getdbt.com, and https://airflow.apache.org.

neumann 2022-04-08T21:04:09.682379Z

@leif.eric.fredheim Thanks for the idea! That would be fun to talk about. I could see a number of different motivations in that space. Eg. making a "relational" interface that can map to any relational DB. Eg. Shielding the application from how the data is persisted to avoid tight coupling with the application code. Eg. Avoiding having to write CRUD. etc.

πŸ‘ 1
neumann 2022-04-08T21:06:08.036849Z

In the last 4 years or so, for me, I've ended up working with extremely distributed systems, so all of the databases that exist are local only to each specific node in the system. To put it another way, there is no one shared data store that multiple nodes read and write to.

πŸ‘ 1
neumann 2022-04-08T21:06:46.230819Z

So that affects my opinions on databases for sure. They mainly devolve into application-level caches for my problem domains.

πŸ‘ 1
neumann 2022-04-08T21:08:47.506719Z

The only exception to that I can think of in my own work is reporting databases. I'll have one node responsible for maintaining a relational database that is hooked up to a reporting tool (like Metabase or Superset). It gets all its information from the rest of the system via messaging and its sole concern is recording things that can be reported on.

πŸ‘ 1
neumann 2022-04-08T21:10:14.144669Z

I work with extremely live and real-time systems, so most of the data in the system is the "current state" of other systems.

πŸ‘ 1
leifericf 2022-04-10T08:53:07.811119Z

@neumann Your context sounds ideal for Erlang/OTP πŸ˜… https://www.erlang.org/doc/man/gen_server.html, stateful https://www.erlang.org/doc/reference_manual/processes.html and https://www.erlang.org/doc/man/mnesia.html.

neumann 2022-04-10T21:00:25.388439Z

Yes, I use a "process" like abstraction. I ended up writing me own little framework for it. I opened sourced it, but I've changed it significantly since then and I need to update the public version.

πŸ‘ 1
leifericf 2022-04-11T05:37:34.841439Z

@neumann Did you implement something similar to https://en.m.wikipedia.org/wiki/Actor_model?” That’s basically what Erlang/OTP is at its core. Similar to https://en.m.wikipedia.org/wiki/Akka_(toolkit) in the Scala universe.