Go to file
wayne c91d556edf feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache
This commit brings over `TableIndexCache` support from the enterprise
repo. It primarily focuses on efficient automatic cleanup of expired
gen1 parquet files based on retention policies and hard deletes. It

- Adds purge operations for tables and retention period expired data.
- Integrates `TableIndexCache` into `PersistedFiles` for the sake of
  parquet data deletion handling in `ObjectDeleter` impl.
- Introduces a new background loop for applying data retention polices
  with a 30m default interval.
- Includes comprehensive test coverage for cache operations, concurrent
  access, persisted snapshot to table index snapshot splits, purge
  scenario, object store path parsing, etc.

\## New Types

- `influxdb3_write::table_index::TableIndex`:
  - A new trait that tracks gen1 parquet file metadata on a per-table
    basis.

- `influxdb3_write::table_index::TableIndexSnapshot`:
  - An incremental snapshot of added and removed gen1 parquet files.
  - Created by splitting a `PersistedSnapshot` (ie a whole-database
    snapshot) into individual table snapshots.
  - Uses the existing snapshot sequence number.
  - Removed from object store after successful aggregation into
    `CoreTableIndex`.

- `influxdb3_write::table_index::CoreTableIndex`:
  - Implements of `TableIndex` trait.
  - Aggregation of `TableIndexSnapshot`s.
  - Not versioned -- assumes that we will migrate away from Parquet in
    favor of PachaTree in the medium/long term.

- `influxdb3_write::table_index_cache::TableIndexCache`
  - LRU cache
  - Configurable via CLI parameters:
    - Concurrency of object store operations.
    - Maximum number of `CachedTableIndex` to allow before evicting
      oldest entries.
  - Entrypoint for handling conversion of `PersistedSnapshot` to
    `TableIndexSnapshot` to `TableIndex`

- `influxdb3_write::table_index_cache::CachedTableIndex`
  - Implements `TableIndex` trait
  - Accessing ParquetFile or TableIndex causes last access time to be
    updated.
  - Stores a mutable `CoreTableIndex` as implementation detail.

- `influxdb3_write::retention_period_handler::RetentionPeriodHandler`
  - Runs a top-level background task that periodically applies retention
    periods to gen1 files via the `TableIndexCache`.
  - Configurable via CLI parameters:
    - Retention period handling interval

\## Updated Types

- `influxdb3_write::persisted_files::PersistedFiles`
  - Now holds an `Arc` reference to `TableIndexCache`
  - Uses its `TableIndexCache` to apply hard deletion to all historical
    gen1 files and update associated `CoreTableIndex` in the object
    store.
2025-07-25 14:37:31 -08:00
.cargo chore: Upgrade to Rust 1.78.0 (#24953) 2024-05-02 13:39:20 -04:00
.circleci ci: fix `fetch-python` (#26613) 2025-07-16 16:14:33 -04:00
.github chore: Remove dependabot for our repo (#24693) 2024-02-26 13:38:20 -05:00
assets chore: Update README for InfluxDB main repo (#25101) 2024-06-27 12:50:05 -04:00
docker chore: use influxdata-archive.key in docker/Dockerfile.ci (#26595) 2025-07-09 12:09:53 -05:00
influxdb3 feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache 2025-07-25 14:37:31 -08:00
influxdb3_authz chore: add workspace lints to influxd3_authz crate (#26467) 2025-05-27 14:07:56 -04:00
influxdb3_cache feat: Hard delete database and table (#26553) 2025-06-24 12:36:23 +01:00
influxdb3_catalog chore: backport module documentation for influxdb3_catalog (#26606) 2025-07-14 21:22:29 -04:00
influxdb3_clap_blocks fix: AWS S3 API returns object_store::Error::Generic variant when token is expired (#1013) (#26605) 2025-07-11 15:13:13 -06:00
influxdb3_client feat: Hard delete database and table (#26553) 2025-06-24 12:36:23 +01:00
influxdb3_id feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache 2025-07-25 14:37:31 -08:00
influxdb3_internal_api chore: bring back enterprise changes (#25858) 2025-01-17 13:24:32 -05:00
influxdb3_load_generator chore: Update to Rust 1.88 (#26567) 2025-06-27 07:38:45 +10:00
influxdb3_process chore: Update to Rust 1.88 (#26567) 2025-06-27 07:38:45 +10:00
influxdb3_processing_engine feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache 2025-07-25 14:37:31 -08:00
influxdb3_py_api chore: Update to Rust 1.88 (#26567) 2025-06-27 07:38:45 +10:00
influxdb3_server feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache 2025-07-25 14:37:31 -08:00
influxdb3_shutdown chore: porting some utilities that were created in pro (#26529) 2025-06-17 17:24:41 +01:00
influxdb3_sys_events feat: Update to Rust 1.85 and 2024 Edition (#26046) 2025-02-20 14:58:07 -05:00
influxdb3_telemetry feat: add trigger count to telemetry (#26426) 2025-05-16 17:18:26 +01:00
influxdb3_test_helpers chore: update to latest influxdb3_core (#26429) 2025-05-26 14:11:06 -04:00
influxdb3_types fix: Existing soft-deleted schema can be hard-deleted (#26574) 2025-07-03 07:26:13 +10:00
influxdb3_wal chore: Update to Rust 1.88 (#26567) 2025-06-27 07:38:45 +10:00
influxdb3_write feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache 2025-07-25 14:37:31 -08:00
iox_query_influxql_rewrite feat: Update to Rust 1.85 and 2024 Edition (#26046) 2025-02-20 14:58:07 -05:00
.editorconfig chore: editor config spacing for shell scripts 2022-12-13 11:12:11 +01:00
.gitattributes feat: implement jaeger-agent protocol directly (#2607) 2021-09-22 17:30:37 +00:00
.gitignore feat: Generate testing TLS certs on the fly (#26288) 2025-04-21 11:43:33 -04:00
.kodiak.toml chore: Set default to squash 2022-01-25 15:57:10 +01:00
CONTRIBUTING.md docs: add Building from source section to CONTRIBUTING.md (#26364) 2025-05-07 09:47:18 -04:00
Cargo.lock feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache 2025-07-25 14:37:31 -08:00
Cargo.toml feat: introduce TableIndexSnapshot, TableIndex, and TableIndexCache 2025-07-25 14:37:31 -08:00
Dockerfile chore: updates to Dockerfile (#26576) 2025-07-01 18:57:14 +01:00
Dockerfile.dockerignore feat: build and use python-build-standalone with official builds (#25969) 2025-02-13 16:16:05 -06:00
LICENSE-APACHE fix: Add LICENSE (#430) 2020-11-10 12:10:07 -05:00
LICENSE-MIT fix: Add LICENSE (#430) 2020-11-10 12:10:07 -05:00
PROFILING.md docs: `PROFILING.md` (#25075) 2024-07-24 11:01:36 -04:00
README.md docs: add Building from source section to CONTRIBUTING.md (#26364) 2025-05-07 09:47:18 -04:00
README_processing_engine.md fix(py): update to python 3.13.5-20250612 for security fixes (#26518) 2025-06-13 14:01:30 -05:00
RELEASE.md chore: updates to RELEASE.md (#26589) 2025-07-04 11:55:30 +01:00
SECURITY.md chore: tweak wording and don't reference gpg key in SECURITY.md (#24838) 2024-03-25 14:34:36 -05:00
deny.toml chore: update to latest influxdb3_core (#26429) 2025-05-26 14:11:06 -04:00
install_influxdb.sh chore: update version in install script (#26588) 2025-07-03 20:40:58 +01:00
run-tests.sh chore: fix flakey test in write buffer (#26494) 2025-06-03 22:27:21 +01:00
rust-toolchain.toml chore: Update to Rust 1.88 (#26567) 2025-06-27 07:38:45 +10:00
rustfmt.toml feat: Update to Rust 1.85 and 2024 Edition (#26046) 2025-02-20 14:58:07 -05:00

README.md

InfluxDB Logo

InfluxDB Core is a database built to collect, process, transform, and store event and time series data. It is ideal for use cases that require real-time ingest and fast query response times to build user interfaces, monitoring, and automation solutions.

Common use cases include:

  • Monitoring sensor data
  • Server monitoring
  • Application performance monitoring
  • Network monitoring
  • Financial market and trading analytics
  • Behavioral analytics

InfluxDB is optimized for scenarios where near real-time data monitoring is essential and queries need to return quickly to support user experiences such as dashboards and interactive user interfaces.

InfluxDB 3 Cores feature highlights include:

  • Diskless architecture with object storage support (or local disk with no dependencies)
  • Fast query response times (under 10ms for last-value queries, or 30ms for distinct metadata)
  • Embedded Python VM for plugins and triggers
  • Parquet file persistence
  • Compatibility with InfluxDB 1.x and 2.x write APIs
  • Compatability with InfluxDB 1.x query API (InfluxQL)
  • SQL query engine with support for FlightSQL and HTTP query API

Project Status

InfluxDB 3 Core is GA as of April 15, 2025! We plan to have monthly point releases for the following six months, with patch releases as needed. We will move to a quarterly cadence after that for 3-4 releases, after which we'll reevaluate our release schedule.

Join the InfluxDB3 Discord or the public channels below to share your feedback, feature requests, and bug reports.

See the InfluxDB 3 Core & Enterprise GA release announcement here or dig into the InfluxDB 3 getting started guide here.

Learn InfluxDB

Documentation | Community Forum | Community Slack | Blog | InfluxDB University | YouTube

Try InfluxDB Cloud for free and get started fast with no local setup required. Click here to start building your application on InfluxDB Cloud.

Installation

We have nightly and versioned Docker images, Debian packages, RPM packages, and tarballs of InfluxDB available on the InfluxData downloads page. We also provide the InfluxDB command line interface (CLI) client as a separate binary available at the same location.

If you are interested in building from source, see the building from source guide for contributors.

To begin using InfluxDB, visit our Getting Started with InfluxDB documentation.

License

The open source software we build is licensed under the permissive MIT or Apache 2 licenses at the user's choosing. Weve long held the view that our open source code should be truly open and our commercial code should be separate and closed.

Interested in joining the team building InfluxDB?

Check out current job openings at www.influxdata.com/careers today!