Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions documentation/deployment/aws.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ import CodeBlock from "@theme/CodeBlock"
|-----------|-------------|-------|
| Instance | `m7i.xlarge` or `r7i.2xlarge` | 4-8 vCPUs, 16-64 GiB RAM |
| Storage | `gp3`, 200+ GiB | 16000 IOPS / 1000 MBps |
| File system | `zfs` with `lz4` | Or `ext4` if compression not needed |
| File system | `ext4` or `xfs` | Compression is handled by Parquet, not the file system |
| Compression | Storage policy with `TO PARQUET` | Add `TO REMOTE` to tier history to S3 (Enterprise) |
| Ports | 9000, 8812, 9009, 9003 | Restrict to known IPs only |

---
Expand Down Expand Up @@ -75,13 +76,30 @@ before provisioning storage.

**File system:**

Use `zfs` with `lz4` compression to reduce storage costs. If you don't need
compression, `ext4` or `xfs` offer slightly better performance.
Format the data disk as `ext4` or `xfs`. QuestDB compresses data itself, so the
file system does not need to.

**Compression and tiering:**

QuestDB compresses data by storing older partitions as
[Parquet](/docs/concepts/parquet/#data-compression), which uses `lz4_raw`
compression by default and stays fully queryable. In QuestDB Enterprise, a
[storage policy](/docs/concepts/storage-policy/) with a `TO PARQUET` stage
converts partitions automatically as they age. In QuestDB open source, convert
them manually with
[`ALTER TABLE CONVERT PARTITION`](/docs/concepts/parquet/#converting-to-parquet).

For further savings in Enterprise, add a `TO REMOTE` stage so the policy also
tiers Parquet partitions to S3 [cold storage](/docs/concepts/cold-storage/). S3
usually costs less than EBS, the cluster keeps a single copy that every instance
reads instead of one copy per replica, and history can grow beyond the size of
a single volume.

**Unsupported storage:**

- **EFS** - Not supported. Network latency is too high for database workloads.
- **S3** - Not supported as primary storage. Use for replication (Enterprise only).
- **S3** - Not supported as primary storage. Use for replication and cold
storage (Enterprise only).

### Networking

Expand Down
27 changes: 23 additions & 4 deletions documentation/deployment/azure.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import CodeBlock from "@theme/CodeBlock"
|-----------|-------------|-------|
| Instance | `D4s_v5` or `E8s_v5` | 4-8 vCPUs, 16-64 GiB RAM |
| Storage | Premium SSD v2, 200+ GiB | 16000 IOPS / 1000 MBps |
| File system | `zfs` with `lz4` | Or `ext4` if compression not needed |
| File system | `ext4` or `xfs` | Compression is handled by Parquet, not the file system |
| Compression | Storage policy with `TO PARQUET` | Add `TO REMOTE` to tier history to Blob Storage (Enterprise) |
| Ports | 9000, 8812, 9009, 9003 | Restrict to known IPs only |

---
Expand Down Expand Up @@ -100,14 +101,32 @@ capacity to get required IOPS.

**File system:**

Use `zfs` with `lz4` compression to reduce storage costs. If you don't need
compression, `ext4` or `xfs` offer slightly better performance.
Format the data disk as `ext4` or `xfs`. QuestDB compresses data itself, so the
file system does not need to.

**Compression and tiering:**

QuestDB compresses data by storing older partitions as
[Parquet](/docs/concepts/parquet/#data-compression), which uses `lz4_raw`
compression by default and stays fully queryable. In QuestDB Enterprise, a
[storage policy](/docs/concepts/storage-policy/) with a `TO PARQUET` stage
converts partitions automatically as they age. In QuestDB open source, convert
them manually with
[`ALTER TABLE CONVERT PARTITION`](/docs/concepts/parquet/#converting-to-parquet).

For further savings in Enterprise, add a `TO REMOTE` stage so the policy also
tiers Parquet partitions to Blob Storage
[cold storage](/docs/concepts/cold-storage/). Blob Storage usually costs less
than managed disks, the cluster keeps a single copy that every instance reads
instead of one copy per replica, and history can grow beyond the size of a
single disk.

**Unsupported storage:**

- **Azure NetApp Files** - Not supported as primary storage (NFS latency too high)
- **blobfuse2** - Not supported for database workloads
- **Blob Storage** - Supported for Enterprise replication only, not primary storage
- **Blob Storage** - Supported for Enterprise replication and cold storage only,
not primary storage

### Networking

Expand Down
16 changes: 16 additions & 0 deletions documentation/deployment/compression-zfs.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,22 @@ description:
How to install ZFS and enable system-level compression for QuestDB.
---

:::warning Use Parquet for compression

The preferred way to compress QuestDB data is to convert partitions to
[Parquet](/docs/concepts/parquet/#data-compression). QuestDB compresses Parquet
partitions natively and keeps them fully queryable, with no file system
requirements. In QuestDB Enterprise, a
[storage policy](/docs/concepts/storage-policy/) converts partitions
automatically as they age, and can also tier them to object storage. In QuestDB
open source, convert partitions manually with
[`ALTER TABLE CONVERT PARTITION`](/docs/concepts/parquet/#converting-to-parquet).

ZFS compression works at the file system level, outside the database. This page
remains for existing deployments that already run on ZFS.

:::

QuestDB can use [ZFS](https://openzfs.org/wiki/Main_Page) for system-level
compression, reducing disk usage without application changes.

Expand Down
8 changes: 0 additions & 8 deletions documentation/deployment/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,14 +218,6 @@ available on `http://localhost:4000`:
docker run -v "$(pwd):/var/lib/questdb/conf" -p 4000:4000 questdb/questdb
```

:::note

If you wish to use ZFS for your QuestDB deployment, with Docker, then you will need to enable ZFS on the host volume that Docker uses.

Please see the [docker documentation](https://docs.docker.com/storage/storagedriver/zfs-driver/) for more information.

:::

### Upgrade QuestDB version

It is possible to upgrade your QuestDB instance on Docker when a volume is
Expand Down
30 changes: 23 additions & 7 deletions documentation/deployment/gcp.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import MinimumHardware from "../../src/components/DRY/_questdb_production_hardwa
|-----------|-------------|-------|
| Instance | `c3-standard-4` or `c3-highmem-8` | 4-8 vCPUs, 16-64 GiB RAM |
| Storage | Hyperdisk Balanced data disk, 300+ GiB | 5000 IOPS / 300 MBps for production |
| File system | `ext4` | Or `zfs` with `lz4` for on-disk compression |
| File system | `ext4` | Compression is handled by Parquet, not the file system |
| Compression | Storage policy with `TO PARQUET` | Add `TO REMOTE` to tier history to GCS (Enterprise) |
| Ports | 9000, 8812, 9009, 9003 | Restrict to known IPs only |

---
Expand Down Expand Up @@ -76,16 +77,31 @@ cannot be used on `C3` machines smaller than `88 vCPUs`.

**File system:**

Format the data disk as `ext4`. If you need on-disk compression, use `zfs` with
`lz4` instead, at a small performance cost. See
[ZFS compression](/docs/deployment/compression-zfs/).
Format the data disk as `ext4`. QuestDB compresses data itself, so the file
system does not need to.

**Compression and tiering:**

QuestDB compresses data by storing older partitions as
[Parquet](/docs/concepts/parquet/#data-compression), which uses `lz4_raw`
compression by default and stays fully queryable. In QuestDB Enterprise, a
[storage policy](/docs/concepts/storage-policy/) with a `TO PARQUET` stage
converts partitions automatically as they age. In QuestDB open source, convert
them manually with
[`ALTER TABLE CONVERT PARTITION`](/docs/concepts/parquet/#converting-to-parquet).

For further savings in Enterprise, add a `TO REMOTE` stage so the policy also
tiers Parquet partitions to Google Cloud Storage
[cold storage](/docs/concepts/cold-storage/). GCS usually costs less than
Hyperdisk, the cluster keeps a single copy that every instance reads instead of
one copy per replica, and history can grow beyond the size of a single disk.

**Unsupported storage:**

- **Filestore** - Not supported as primary storage (NFS latency too high). Use
for Enterprise replication only (see [Enterprise on GCP](#enterprise-on-gcp)).
- **Google Cloud Storage** - Not supported as primary storage. Use for
Enterprise replication only.
Enterprise replication and cold storage only.

### Networking

Expand Down Expand Up @@ -282,8 +298,8 @@ gcloud compute ssh questdb-europe-west3 --zone europe-west3-a

Run these commands on the VM over SSH. They assume the attached data disk uses
the custom device name `questdb-data` and format it as `ext4`, which is the
recommended default. If you need on-disk compression, format the data disk as
`zfs` with `lz4` instead. See [ZFS compression](/docs/deployment/compression-zfs/).
recommended default. To compress data, use Parquet rather than the file system,
as described in [Compression and tiering](#storage).

:::warning
The `mkfs.ext4` command erases the target device. Run it only on a new blank
Expand Down
1 change: 0 additions & 1 deletion documentation/deployment/hetzner.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ description:
This document explains what hardware to use, and how to provision QuestDB on Hetzner Cloud with storage volumes and automated backups.
---

import FileSystemChoice from "../../src/components/DRY/_questdb_file_system_choice.mdx"
import MinimumHardware from "../../src/components/DRY/_questdb_production_hardware-minimums.mdx"
import InterpolateReleaseData from "../../src/components/InterpolateReleaseData"
import CodeBlock from "@theme/CodeBlock"
Expand Down
24 changes: 13 additions & 11 deletions documentation/getting-started/capacity-planning.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,7 @@ For optimum performance, utilize the maximum settings:

### Supported filesystems

To enable compression and to match our recommended performance profile, we
recommend using [ZFS file system](https://en.wikipedia.org/wiki/ZFS).

ZFS is required for system-level compression.

While ZFS is recommended, QuestDB open source supports the following
filesystems:
QuestDB supports the following filesystems:

- APFS
- EXT4
Expand Down Expand Up @@ -94,10 +88,18 @@ QuestDB database.

### Data compression

To enable data compression, filesystem must be ZFS.

For instructions on how to do so, see the
[ZFS and compression](/docs/deployment/compression-zfs/) guide.
QuestDB compresses data by converting partitions to
[Parquet](/docs/concepts/parquet/#data-compression), which uses `lz4_raw`
compression by default and keeps partitions fully queryable. In QuestDB
Enterprise, a [storage policy](/docs/concepts/storage-policy/) converts
partitions automatically as they age, and can also tier them to
[cold storage](/docs/concepts/cold-storage/) in object storage. In QuestDB open
source, convert partitions manually with
[`ALTER TABLE CONVERT PARTITION`](/docs/concepts/parquet/#converting-to-parquet).

Compression does not depend on the file system. File-system compression with
[ZFS](/docs/deployment/compression-zfs/) also works, but Parquet is the
recommended approach.

### Write amplification

Expand Down
Loading
Loading