Skip to main content

timedb — opinionated schema & API for time series

Project description

⏱️ TimeDB

An open-source, opinionated time-series database built on PostgreSQL & TimescaleDB.

PyPI Python Versions License

TimeDB demo

TimeDB is designed to natively handle overlapping forecast revisions, auditable human-in-the-loop updates, and "time-of-knowledge" history. Using a three-dimensional temporal data model, it provides a seamless workflow through its Python SDK and FastAPI backend.

Traditional time-series databases assume one immutable value per timestamp. TimeDB is built for complex, real-world domains where forecasts evolve, data gets corrected, and historical backtesting requires strict audits.


🧊 The 3D Temporal Data Model

At the heart of TimeDB is its three-dimensional approach to time. We track not just when data is valid, but when it became known and when it was altered.

Dimension Description Real-World Example
📅 valid_time The time the value represents a fact for. "Wind speed forecast for Wednesday 12:00"
🧠 knowledge_time The time when the value was predicted/known. "Generated on Monday 18:00"
✏️ change_time The time when the value was written or changed. "Manually overridden on Tuesday 09:00"

Audit & Metadata: Every data point also supports tags, annotations, and changed_by to maintain a perfect audit trail of who changed what, when, and why.


✨ Why Choose TimeDB?

  • 📊 Forecast Revisions: Store overlapping forecasts with full provenance.
  • 🔄 Auditable Updates: Manual adjustments generate audit trails, not silent overwrites.
  • True Backtesting: Query historical data as of any point in time ("What did our model know last Monday?").
  • 🏷️ Label-Based Organization: Easily filter and slice series by meaningful dimensions.

🚀 Quick Start

1. Installation

pip install timedb

Requires Python 3.9+ and PostgreSQL 12+ with TimescaleDB.

2. Usage Example

import timedb as td
import pandas as pd
from datetime import datetime, timezone

# Create Schema
td.create()

# 1. Create a forecast series
td.create_series(
    name="wind_power", 
    unit="MW",
    labels={"site": "offshore_1"}, 
    overlapping=True
)

# 2. Insert forecast with knowledge_time
knowledge_time = datetime(2025, 1, 1, 18, 0, tzinfo=timezone.utc)
df = pd.DataFrame({
    'valid_time': pd.date_range('2025-01-01', periods=24, freq='h', tz='UTC'),
    'value': [100 + i*2 for i in range(24)]
})

td.get_series("wind_power")
   .where(site="offshore_1")
   .insert(df=df, knowledge_time=knowledge_time)

# 3. Read latest forecast
df_latest = td.get_series("wind_power").where(site="offshore_1").read()

# 4. Read all historical forecast revisions
df_all = td.get_series("wind_power").where(site="offshore_1").read(versions=True)

🧪 Try it in Google Colab

Want to test TimeDB without setting up PostgreSQL locally? Try our Quickstart in Colab. The first cell automatically installs PostgreSQL + TimescaleDB inside the VM (~2 min).

Open In Colab

Note: Data persists only within the active Colab session. Additional notebooks are available in the examples/ directory.


📚 Documentation & Resources


🤝 Contributing

Contributions are welcome! If you're interested in improving TimeDB, please see our Development Guide for local setup instructions.


Licensed under the Apache-2.0 License.

Find a bug or have a feature request? Open an Issue.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

timedb-0.1.3.tar.gz (48.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

timedb-0.1.3-py3-none-any.whl (44.4 kB view details)

Uploaded Python 3

File details

Details for the file timedb-0.1.3.tar.gz.

File metadata

  • Download URL: timedb-0.1.3.tar.gz
  • Upload date:
  • Size: 48.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for timedb-0.1.3.tar.gz
Algorithm Hash digest
SHA256 7832fd0f6f28ce28ba19f48370b993dca5c9fb6e1ef61bf7f3357819025ea8f9
MD5 6e335b05a1d48d510c6b6f2547ae776e
BLAKE2b-256 847e6467b9c92eecd4e29b043952d3a9a2c398d511ab7aab809b2d95b7983d99

See more details on using hashes here.

Provenance

The following attestation bundles were made for timedb-0.1.3.tar.gz:

Publisher: publish.yml on rebase-energy/timedb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timedb-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: timedb-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 44.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for timedb-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 fd97f1d2113c53db583d27ff68eedbb58755006ecc6278c1da77efa4cf9cd2c8
MD5 058304da2046c9e4958e823290b5910b
BLAKE2b-256 e14fd2e078d2d7ab8d4b5ace015d351811c03f87b2d52b4ba6b438848e0d3733

See more details on using hashes here.

Provenance

The following attestation bundles were made for timedb-0.1.3-py3-none-any.whl:

Publisher: publish.yml on rebase-energy/timedb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page