July 5th, 2024

Graph-Based Ceramics

The article discusses managing ceramic glazes, introducing a custom app. It compares Firebase and Supabase databases, opting for Supabase's better data modeling. Instant database is explored for a hybrid solution.

Read original articleLink Icon
Graph-Based Ceramics

The article discusses the challenges of managing ceramic glazes and combinations, leading to the creation of a custom app. The author explores different database options to store and retrieve data efficiently. Initially considering Firebase for its ease of use but realizing its limitations in handling relational data, the author opts for Supabase, a PostgreSQL-based solution, for better data modeling capabilities. However, Supabase lacks some features like optimistic updates and offline support that Firebase offers. The author then explores Instant, a graph-based database, as a potential solution that combines the speed of Firebase with the relational capabilities of Supabase. Instant's querying language, InstaQL, simplifies data retrieval without the need for complex configurations. The article highlights the ease of creating and querying data in Instant using transactions to establish relationships between objects. Ultimately, the author finds Instant to be a promising option for efficiently managing ceramic data with its graph-based approach.

Link Icon 5 comments
By @areichert - 5 months
Author here!

Surprised to see this on the front page again (hello fellow pottery enthusiasts?), but figured this could be a good chance to address some of the comments from the recent discussion [0] since I missed it last time :P

The most common feedback seemed to be, "this is dumb, just use SQLite", which is definitely valid.

This was actually how I initially started building the app (using SQLite), and it worked pretty well. There were a couple reasons I abandoned this approach though: one, whenever I had to uninstall and reinstall the app, the data would get wiped; two, I still had to deal with migrations and other annoying boilerplate; and three, I wanted to be able to share my results with my friends in a read-only web view.

(That being said, I'm also curious to explore how tools like ElectricSQL [1], PowerSync [2], TinyBase [3], etc. play with SQlite to handle some of these issues. At a glance, it just seemed like these would require more time to setup compared to InstantDB [4].)

Another similar comment that popped up a few times was the idea that if I'm trying to model _relational_ data, it would be ridiculous to use anything other than a _relational_ database.

I think that's fair, but I also think it's fair to say a graph database is also "relational" in some sense, or at least "relationship-centric" [5] :)

Either way, I had a lot of fun with this. And I was definitely optimizing more for speed/scrappiness than for doing it The Right Way, so if anyone has any thoughts on how to build stuff faster, I'd love to hear it!

[0] https://news.ycombinator.com/item?id=40860116

[1] https://electric-sql.com/

[2] https://www.powersync.com/

[3] https://tinybase.org/

[4] https://www.instantdb.com/

[5] https://aws.amazon.com/compare/the-difference-between-graph-...

By @raymondgh - 5 months
This is awesome. About five years ago I wanted to solve the same problem of tracking my pots and glazes. I also noticed the many:many relationship very quickly and deliberated on the schema. Neo4j looked really cool but I think I ended up going with join tables (ie pots, glazes, pot_glaze) in Postgres. I think I didn’t get nearly as far as you did in a weekend though!

Lately I hack in firebase and have been interested in trying supabase. I’ll have to add instantdb to my list.

You should productionize this! Get glaze recipes in there too!

By @dang - 5 months
Discussed recently, but maybe didn't get enough attention?

Graph-Based Ceramics - https://news.ycombinator.com/item?id=40860116 - July 2024 (17 comments)

By @potter2024 - 5 months
there is actual science behind this, check a glaze calculator like insight https://insight-live.com/ and component info like https://digitalfire.com
By @throwawayyyyhhh - 5 months
If you're trying a lot of different options you may want to check out something called Design of Experiments. [0]

0. https://en.wikipedia.org/wiki/Design_of_experiments