Layered Sparse Files for Memory-Efficient Data Querying

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Large codebases and complex data structures, such as dependency graphs or neural networks, face challenges in efficiently managing and querying data due to their massive size, where traditional methods struggle with loading dependency graphs into memory and handling changes over time.

Innovation Solution

The approach involves creating sparse files for each commit that contain only changed pages, mapping these pages to page addresses, and layering them on top of a base file, allowing for rapid writing and reading by initially empty in-memory objects that load pages on demand from sparse files and the base file, optimizing memory usage and query performance.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Speed

If the entire dependency graph is loaded into memory, then query operations can be performed quickly, but memory consumption becomes prohibitive for massive codebases

Engineering Contradiction:
Improvequery speedVSAvoidmemory consumption
Core Design Contradiction:
SpeedVSQuantity of substance

Solution Approach 1:

The dependency graph is segmented into fixed-size pages that are stored in a base file and sparse files. Instead of loading the entire graph into memory, only the necessary pages are loaded on-demand, dividing the massive data structure into manageable units that can be selectively accessed.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The dependency graph is pre-divided into pages and stored in a base file with a sparse file structure before any queries are performed. This preliminary organization allows the system to quickly determine which pages contain relevant data and load only those pages into memory when needed, rather than loading everything upfront.

Inventive Principle:
Principle #10Preliminary action

2Reliability

If all pages of the dependency graph are loaded into memory, then complete data is available for querying, but the system cannot handle very large codebases

Engineering Contradiction:
Improvedata completenessVSAvoidmemory usage
Core Design Contradiction:
ReliabilityVSQuantity of substance

Solution Approach 1:

The system dynamically loads pages into memory based on query requirements rather than statically loading all pages upfront. The in-memory object grows only to the extent necessary to satisfy the current query, allowing the system to handle arbitrarily large dependency graphs by adapting memory usage to actual needs.

Inventive Principle:
Principle #15Dynamics

Solution Approach 2:

A page cache and file mapping mechanism serve as intermediaries between the stored dependency graph and the query processor. The base file and sparse files store the complete graph on disk, while the in-memory object acts as a temporary workspace that holds only the pages currently needed for query execution, eliminating the need to load the entire graph into memory.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Quantity of substance

If sparse files are created for each commit to track changes, then memory usage is reduced, but the reading process becomes more complex

Engineering Contradiction:
Improvememory usageVSAvoidreading process complexity
Core Design Contradiction:
Quantity of substanceVSDevice complexity

Solution Approach 1:

Instead of modifying the base file for each commit, the system creates sparse files that contain copies of only the changed pages. Each sparse file represents a commit's changes and can be independently processed. The reading process combines pages from the base file and relevant sparse files to reconstruct the dependency graph at any point in time.

Inventive Principle:
Principle #26Copying

Solution Approach 2:

Each sparse file is optimized to contain only the specific pages that changed in that commit, rather than duplicating the entire dependency graph. This local optimization reduces the size of each sparse file and allows the reading process to selectively access only the necessary sparse files and pages, managing complexity through targeted data retrieval.

Inventive Principle:
Principle #3Local quality

Data Source

PatentUS11487467B1Layered memory mapped file technology
Publication Date: 2022.11.01 MICROSOFT TECHNOLOGY LICENSING LLC
  • US11487467B1 patent drawing
  • US11487467B1 patent drawing
  • US11487467B1 patent drawing

AI summary

Rapid writing to and reading from even very large amounts of data, especially where the data evolves more slowly over time. For each of a sequence of commits of the data, the data is represented by identifying pages of the data that have changed since a prior commit in the sequence of commits. A sparce file is formulate for the commit, and contains each of identified pages, and for each identified page a mapping of the identified to a page address of the identified page in the address range. The sparce file is then stored as associated with the corresponding commit. Thus, an ordered sequence of sparce files can be created and layered on top of a base file that represents the entire page address range. The sparce files may be quite small as there may be relatively few pages (or perhaps even no pages) that changed since the prior commit in the sequence of commits. Reads occur by creating a sparce in-memory object, and checking for each page at each sparce.