Logo

dev-resources.site

for different kinds of informations.

Curiosity: Using Ably.io Realtime Messaging as a Lightweight Database

Published at
1/4/2025
Categories
realtime
ably
javascript
database
Author
pablo_74
Categories
4 categories in total
realtime
open
ably
open
javascript
open
database
open
Author
8 person written this
pablo_74
open
Curiosity: Using Ably.io Realtime Messaging as a Lightweight Database

This is my 14th write up on dev.to site. This post demonstrates a curious way to use realtime messaging capabilities.

Note: this is NOT the typical solution of realtime messaging.

Ably offers various solutions for developers, with their most popular being realtime messaging based on the pub/sub model. When you publish a message to a channel, all devices connected to that channel receive it instantly.

Ably provides message persistence for your channel's messages (24 hours on free accounts). What's particularly interesting is their feature that allows the last message to persist for 365 days. I'll leverage this capability in this example.

The concept is straightforward: imagine a web or mobile app with a form and a list of records (such as a todo list, shopping list, or contact list) stored as a single persisted message. When you launch the app on any device (PC, tablet, or phone), it synchronizes data from Ably. Any changes you make to your data are saved as a new persisted message, effectively creating a "realtime database" accessible across all your devices.

There are some limitations to consider. The maximum message length is 64 KB (including metadata, ID, timestamp etc.). Since messages exceeding 2 KB are split into chunks for transmission, Ably recommends keeping data size well below this limit. Therefore, this solution is best suited for small amounts of data.

I tested this concept, and it works perfectly. Adding and deleting records triggers message updates that keep all client applications (web/mobile) in sync.

I've created a simple proof-of-concept as a single page (HTML + CSS + JS) on flems.io. To try it yourself, you'll need to:

  1. Create an Ably app
  2. Insert your API key into the JS code (row 37)
  3. Create a channel named "Realtime" and enable the "persist last message" option

There is an important part of app, JS code:

const ably = new Ably.Realtime("put your API KEY here");
const channel = ably.channels.get('[?rewind=1]Realtime');
var persons = [];

channel.subscribe("db", (message) => {
  persons = message.data;
  renderTable();
});

function addPerson() {
  const name = document.getElementById('name').value;
  const age = document.getElementById('age').value;
  const role = document.getElementById('role').value;

  if (name && age && role) {
    const newPerson = { name: name, age: age, role: role };
    persons.push(newPerson);
    updatePersons();
    document.getElementById('name').value = '';
    document.getElementById('age').value = '';
    document.getElementById('role').value = '';
  }
}

function deletePerson(index) {
  persons.splice(index, 1);
  updatePersons();
}

function updatePersons() {
  channel.publish("db", persons);
}

function renderTable() {
  const personTable = 
  document.getElementById('personTable');
  personTable.innerHTML = '';
  persons.forEach((person, index) => {
    const row = `<tr>
    <td>${person.name}</td>
    <td>${person.age}</td>
    <td>${person.role}</td>
    <td><button onclick="deletePerson(${index})">( X )</button></td>
    </tr>`;
    personTable.innerHTML += row;
  });
}
Enter fullscreen mode Exit fullscreen mode

My app on flems.io

Hope this inspires you! :-)

realtime Article's
30 articles in total
Favicon
Real-Time Voice Interactions with the WebSocket Audio Adapter
Favicon
Curiosity: Using Ably.io Realtime Messaging as a Lightweight Database
Favicon
Real-Time Voice Interactions over WebRTC
Favicon
Building a Real-Time Collaborative Text Editor with Slate.js
Favicon
Chat API pricing: Comparing MAU and per-minute consumption models
Favicon
Scaling Kafka with WebSockets
Favicon
Build a Real-Time Voting System with Strapi & Instant DB: Part 2
Favicon
WebSocket architecture best practices: Designing scalable realtime systems
Favicon
Build a Real-Time Voting System with Strapi & Instant DB: Part 1
Favicon
Ingesting F1 Telemetry UDP real-time data in AWS EKS
Favicon
Make a real-time, offline first application with Instant
Favicon
Tennis Australia relies on Ably to deliver live experiences for millions of tennis fans worldwide
Favicon
OctoPalm.js || JavaScript library to add real-time, customizable search to your web applications.
Favicon
Building a "Real-Time" Data Integration Platform on AWS
Favicon
Implementing Real-Time Updates with Server-Sent Events (SSE) in C# .NET: A Complete Guide
Favicon
Understanding the Importance of Kafka in High-Volume Data Environments
Favicon
Building Real-Time Applications with SignalR in .NET
Favicon
Not All Market Research Studies Need to Have Real-Time/Live Data Reporting!
Favicon
Real-Time Capabilities in API Integration
Favicon
Migrate from Cord to SuperViz
Favicon
Harnessing Firebase in React with Custom Hooks: A Practical Guide
Favicon
laravel reverb installation process and setup with common mistakes
Favicon
🚀 Want to Boost Your Sports Development? Discover the Benefits of Real-Time Results with SportDevs!
Favicon
Authenticate Realtime Pub/Sub WebSocket clients with Supabase
Favicon
Reliably syncing database and frontend state: A realtime competitor analysis
Favicon
Webhooks: A Mindset Change for Batch Jobs
Favicon
Building a Real-Time Messaging Platform with Kafka
Favicon
Real-Time Data Handling with Firestore: Tracking Pending Orders
Favicon
System Design: Hybrid WebApp using server sent event
Favicon
Real-Time Irish Transit Analytics

Featured ones: