Next-level backends with Rama: storing and traversing graphs in 60 LOC

This is the first of a series of posts exploring programming with Rama, ranging from interactive consumer apps, high-scale analytics, background processing, recommendation engines, and much more. This tutorial is self-contained, but for broader information about Rama and how it reduces the cost of building backends so much (up to 100x for large-scale backends), see … Continue reading Next-level backends with Rama: storing and traversing graphs in 60 LOC

Rama, the 100x developer platform, is now free for production use

I’m excited today to announce we’re ending our private beta and making Rama free for production use! You can download Rama here. Rama is a platform for developing any backend at any scale that unifies computation and storage, supports infinite data models, and greatly reduces the amount of infrastructure and code needed to build a … Continue reading Rama, the 100x developer platform, is now free for production use

How AfterHour built an ultra-scalable chat service in one month with Rama

"I built my first chat system in 1999 on the IRC protocol, cofounded a startup for companies to self-host chat rooms, and have built real time multiplayer games. I am intimately familiar with the challenges inherent in running real time messaging, presence, and pub-sub software. At AfterHour we knew that chat was going to be … Continue reading How AfterHour built an ultra-scalable chat service in one month with Rama

How Multiply went from Datomic to XTDB to Rama

“With databases, the conversation always started with ‘what are we able to do?’. I rarely find myself asking what Rama is able to support, and rather ‘how?’. The requirements of the application dictate how we utilise the platform, not the other way around. Rama as a tool allows us to think product first, while still … Continue reading How Multiply went from Datomic to XTDB to Rama

Rama on Clojure’s terms, and the magic of continuation-passing style

Rama is a platform with huge applicability, able to express all the computation and storage for a backend at any scale. Just like the UNIX philosophy of composing simple programs to do more complex tasks, Rama is based on simple building blocks that compose for any backend use case. At the heart of Rama is … Continue reading Rama on Clojure’s terms, and the magic of continuation-passing style

Migrating terabytes of data instantly (can your ALTER TABLE do this?)

Every seasoned developer has been there: whether it's an urgent requirement change from your business leader or a faulty assumption revealing itself after a production deployment, your data needs to change, and fast. Maybe a newly-passed tariff law means recalculation of the tax on every product in your retail catalog (and you sell everything). Maybe … Continue reading Migrating terabytes of data instantly (can your ALTER TABLE do this?)

2.5x better performance: Rama vs. MongoDB and Cassandra

We ran a number of benchmarks comparing Rama against the latest stable versions of MongoDB and Cassandra. The code for these benchmarks is available on Github. Rama’s indexes (called PStates) can reproduce any database’s data model since each PState is an arbitrary combination of durable data structures of any size. We chose to do our … Continue reading 2.5x better performance: Rama vs. MongoDB and Cassandra

Everything wrong with databases and why their complexity is now unnecessary

This post is not going to be about what’s wrong with individual databases. There are so many databases and so many individual API issues, operational problems, and arbitrary limitations that it would be take forever to cover all of them. This post is about what’s wrong with databases as a collection. It’s about what’s wrong … Continue reading Everything wrong with databases and why their complexity is now unnecessary

How Rama is tested: a primer on testing distributed systems

There are a number of properties that are non-negotiable in any software system, such as no data loss, no stalling, and timely recovery from faults. These properties are particularly difficult to achieve in a distributed system, as the vast number of permutations of timings, event orderings, and faults makes reasoning about a distributed system extremely … Continue reading How Rama is tested: a primer on testing distributed systems