Skip to content
[SYSTEM CLOCK :: 10/21/2026, 12:36:07]
██████╗  █████╗ ██████╗ ████████╗ ██████╗ ███╗   ███╗███████╗
██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔═══██╗████╗ ████║██╔════╝
██████╔╝███████║██║  ██║   ██║   ██║   ██║██╔████╔██║█████╗  
██╔══██╗██╔══██║██║  ██║   ██║   ██║   ██║██║╚██╔╝██║██╔══╝  
██║  ██║██║  ██║██████╔╝   ██║   ╚██████╔╝██║ ╚═╝ ██║███████╗
╚═╝  ╚═╝╚═╝  ╚═╝╚═════╝    ╚═╝    ╚═════╝ ╚═╝     ╚═╝╚══════╝

▎ Software Project Organization ▎

SAAS SYSTEMS2026-09-0310 min readRad Tome

Multi-Tenant SaaS Architecture: Designing Hierarchical Node Trees in MongoDB & Redis

How OrgSets structures organizations with nested chapters, delegated permissions, and real-time cache invalidation.

#Multi-Tenant#MongoDB#Redis#Architecture#OrgSets#SaaS
// EXECUTIVE SUMMARY & ABSTRACT

An exploration of hierarchical data modeling in modern SaaS applications. Details the Materialized Path pattern in document stores, Redis pub/sub event fan-out, and recursive permission checks for multi-tiered organizations.

#Beyond Flat Organization Models

Most traditional SaaS platforms assume a flat organization structure: an account has a single owner, several admins, and members. However, real-world organizations—such as national trade unions, fraternal orders, multi-location gyms, and collegiate clubs—operate as hierarchical trees. A national headquarters oversees regional councils, which in turn govern local chapters.

#The Materialized Path Pattern in MongoDB

To allow instant querying of any sub-node tree without expensive recursive queries, OrgSets utilizes the Materialized Path pattern:
SOURCE CODEREADY
// MongoDB Node Document Schema
{
  "_id": ObjectId("66d0a1b2c4e5f67890123456"),
  "name": "Midwest Regional Chapter",
  "slug": "midwest-region",
  "parentId": ObjectId("66d0a0a1b2c3d4e5f6789012"), // National HQ
  "path": ",national-hq,midwest-region,",
  "depth": 1,
  "settings": {
    "duesCollectionEnabled": true,
    "votingDelegation": "REPRESENTATIVE"
  }
}

#Querying Entire Hierarchies in O(1) Index Scans

By indexing the `path` field with a prefix index, retrieving all chapters and teams under the Midwest Region requires a single index scan: ```javascript db.nodes.find({ path: /^,national-hq,midwest-region,/ }) ``` This pattern eliminates N+1 database roundtrips and scales effortlessly to tens of thousands of sub-nodes.
RT
Rad TomeAUTHOR & FOUNDER
Lead Systems Architect & Founder, RadTome

Rad Tome leads software architecture, systems engineering, and open-source tooling at RadTome. Specializes in GraalVM Ahead-of-Time compilation, distributed microservices, Chrome Manifest V3 APIs, and local-first browser developer utilities.

Editorial Integrity Statement: All code snippets, GraalVM benchmarks, and architecture designs tested and verified in production environments.
PUBLISHED BY RADTOME SOFTWARE ORGANIZATION

This publication is part of RadTome's open developer knowledge base. All technical materials are validated against active production systems, open-source repositories, and industry standard benchmarks.