GO TO A SECTION

↑ ↓ to navigate · Enter to openExplore all sections →
FDEInterviews logo
arXiv preprint

ParquetDB: A Lightweight Python Parquet-Based Database

ParquetDB adds Python CRUD operations to Parquet files. Learn how columnar reads, schema evolution and rewrite costs shape its fit for customer data workflows.

Breakdown by FDE Interviews · 15 min read · Updated

About the original · 2025
AUTHORS
Lang, Hernandez, Choudhary, Romero
FROM
West Virginia University, Instituto de Ciencia de Materiales de Madrid, NIST
PUBLISHED
Feb 2025 · arXiv preprint
IN THIS BREAKDOWN · 10 SECTIONS

You can read 13% of this breakdown.

01

The paper in one minute

A customer hands you a directory of JSON exports. Your evaluation job needs a few fields from every record, but each run parses the whole export into Python objects before doing useful work. ParquetDB addresses this kind of workflow: it provides create, read, update and delete operations over a directory of Parquet files, using PyArrow to represent and process the data in memory.

The distinction between those layers matters. Parquet supplies the columnar file format. Arrow supplies typed arrays and processing machinery. ParquetDB supplies a Python interface and manages tasks such as assigning record IDs, aligning schemas and rewriting files after changes. You can work with evolving, nested records without first running a separate database server.

The paper compares ParquetDB with SQLite and MongoDB, then applies it to a large materials dataset. Its strongest lessons concern access patterns. Reading selected columns and handling large batches can suit this design. Frequent small updates incur file-management costs, and the indexed alternatives win the paper's point-lookup comparison.

Read this as a study of a useful storage tradeoff. Before using it for application state, examine recovery and concurrent access as carefully as read speed. The authors explicitly describe manual recovery after a crash or power failure.

THE IDEA, VISUALLY
READ ONLY WHAT THE QUERY NEEDS Illustrative query: ID = 150; return ID and score Five columns, three row groups. Each rectangle is one column chunk. ID score prompt response trace ID 0–99 skip group ID 100–199 read read candidate ID 200–299 skip group Projection excludes unused columns. Min/max statistics exclude impossible groups. A candidate group can still contain rows that fail the filter. Layout determines how much can be skipped.
An original, illustrative view of Parquet's two read reductions: project the columns the query needs, then use row-group statistics to skip impossible matches. Highlighted chunks still contain candidate rows that must be filtered. This is a mechanism diagram, not a measured speedup.
Research notes: the problem, approach and results
100

integer columns in the synthetic benchmark (section 5.1)

~27 s

million-row update; ~18 s attributed to conversion (section 5.5)

~30 s

one-record update with normalization in the materials example (section 6.2.11)

THE PROBLEM

Repeatedly parsing wide JSON exports can dominate a Python data workflow, while maintaining a separate database service adds operational work.

THE IDEA

Wrap Parquet and PyArrow in a CRUD interface, reconcile evolving schemas and keep the dataset in portable files.

THE RESULT

Bulk reads and Arrow-compatible inputs benefit. Indexed point lookups and small updates expose different tradeoffs, and crash recovery needs attention.

02

Why it matters to an FDE

An FDE often owns the intermediate data between a customer's systems and an AI application: evaluation cases, enriched document metadata, feature snapshots or offline results. That data may be too large to reparse comfortably on every run, yet small enough for one machine. A portable directory can make an experiment easier to hand over, provided the recipient also has its schema and provenance.

ParquetDB makes the cost of that convenience visible. Adding a field may require rewriting existing data. Updating one record may touch much more than that record. A read can be inexpensive because it selects a narrow column set, even when another query against the same dataset is slow.

Start with the customer's operations: which fields each job reads, how often records change, how many processes write, and what an acknowledged write must survive. For offline evaluation snapshots, this paper offers a useful design to investigate. For a live agent's payment status or approval queue, the recovery requirements should determine the storage choice first. The Parquet interview question is a good introduction if columnar storage is unfamiliar.

THE FULL BREAKDOWN

Understand the mechanism. Try it on a real problem.

Unlock this breakdown and 199 more papers.

Premium opens every paper in full, plus every answer, concept, course and guide on the site. One payment for six months of access.

6 months · One payment · No auto-renewal

Get Premium · ₹2,000 / $25
  • ◇1 architecture diagram
  • </>2 runnable code blocks
  • ▦3 results tables
  • ?5 interview questions with answers
  1. 03Key takeaways

    Six practical lessons, the vocabulary, and a test for whether this storage model fits

    Free account
  2. 04How it works

    Follow a record through Arrow conversion, schema alignment, file layout and read pruning

    Premium
  3. 05The numbers that matter

    Benchmark settings, useful results, and source inconsistencies that limit comparisons

    Premium
  4. 06Try it yourself

    Run a deterministic experiment on pruning, projection and the cost of separate rewrites

    Premium
  5. 07Where it breaks

    Recovery, mutable serving state, schema drift and misleadingly fast reads

    Premium
  6. 08Using it on a deployment

    A snapshot-oriented adoption plan, a worked read budget and acceptance measurements

    Premium
  7. 09Interview angles

    Five questions that reveal whether you understand the storage work behind the API

    Premium
Back to the paper library →