What is this?

This app lets you try MonetDB's query syntax and performance, and has curated educational examples. You can also upload your own files if you want to analyze them in a "notebook" style or learn with data you know. Although the app runs on a cloud machine generally weaker than a laptop, you may still find the performance good. You can also view the historical profiling information.

What is MonetDB?

MonetDB is a column-oriented database, serving an analytics niche. It's fast, free, and open source. It came from CWI in the Netherlands, a research institution. It was started in 2002, and is still being developed

Being analytics-focused, you could compare it to AWS Redshift, Snowflake, Greenplum, Clickhouse, etc. Those are all tried-and-true solutions with different pros/cons, but don't rule out Monet. I like its "independent" feel (less marketing, less BS, no goals of world domination, etc), and the team has been very responsive whenever I've brought up questions/bugs. In particular, I like their low-hassle "embedded" version. In my professional work, a free install of embedded Monet significantly outperformed one $300/month Redshift setup - and no additional machines were required. Still, I've never met a colleague or acquaintance who has tried it!

If you've worked with the popular Postgresql, maybe 90% of the queries you'll see on this site have a very close relative in Postgres. So, many users of row-oriented databases may find Monet intuitive. Don't be shy!

Get a database

You won't share tables with others; by using MonetDBe (MonetDB "embedded", like SQLite), each database is a folder, so you get your own folder. Monet's main offering is the server version, but the embedded version is used for this app.

Size/usage report

Machine space:
/dev/sda         77G   26G   47G  36% used /

Space used by this project:
18G	.

List of DBs/files/uploads:
2.3G	dbs/059..., unassigned, ready 
2.3G	dbs/30c..., unassigned, ready 
2.4G	dbs/9e0..., unassigned, ready 
2.3G	dbs/b88..., unassigned, ready 
2.3G	dbs/b8e..., unassigned, ready 
368K	dbs/ce0..., unassigned, for profiling 
244M	user_temp/059..., unassigned, ready 
223M	user_temp/30c..., unassigned, ready 
267M	user_temp/9e0..., unassigned, ready 
160M	user_temp/b88..., unassigned, ready 
170M	user_temp/b8e..., unassigned, ready 
154M	user_temp/ce0..., unassigned, for profiling 

Credits

This site was started by Dan Cromartie in January 2022. (no affiliation with the Monet team)

I got some inspiration for the "full control / limited time" aspect from the demo at linuxcontainers.org, for LXC/LXD containers. One of the Covid datasets that is preloaded is from Our World in Data

Thanks to the Monet team for always answering my questions! Let me know if I've misrepresented anything here.

Stack/implementation

This site currently runs on a Linode server with 3.8 GB RAM, and 2 CPU. (specs pulled in real-time). Sometimes I make it really big for fun.

Database prep is slow on a weak machine (2-3 minutes), so I always keep a few dbs pre-built, but user queries get more CPU priorty.

The site is about 2.5k lines of code, excluding example queries, between the Python, HTML, Bash, Ansible, Nginx, etc. There are a few lines of javascript, but the site should run ok without JS.

Security

This is the only app running on that server, and it's confined with AppArmor to prevent general misbehaving. I also attempt to ensure that table import/export from/to files can only reference one particular folder and not arbitary files. Still, these safety features may not be 100% effective. Secrecy of your database's ID is the only thing keeping people out of your data.

Since creating a database is resource-intensive, if you start more than 20 in 1 day, your IP address will be banned for 5 days. If your database or files folder starts to exceed 5GB, it will be removed.

Lost your DB?

Try your browser's back button or history. I intentionally don't show the full IDs here, since they are secrets.