// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements.  See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License.  You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
= Disk Compression

Disk compression refers to the process of compressing data pages when they are written to disk, reducing the size of the on-disk storage.
The pages are kept in memory uncompressed, but when the data is flushed to disk it is compressed using the configured algorithm.
This applies only to data pages that are stored to the persistent storage and does not compress indexes or WAL records.
link:[WAL records compression] can be enabled separately.

Disk page compression can be enabled on a per cache basis in the cache configuration.
The cache must reside in a persistent link:[data region].
There is no option to enable disk page compression globally at the moment.
Moreover, the following prerequisites must be met:

* Set the `pageSize` property in your data storage configuration to at least 2 times the page size of your file system. It means that the page size must be either 8K or 16K.
* Enable the `ignite-compress` module.

To enable disk page compression for a cache, provide one of the available compression algorithms in the cache configuration, as shown in the following example:


[tabs]
--
tab:XML[]

[source, xml]
----
include::code-snippets/xml/disk-compression.xml[tags=ignite-config;!discovery, indent=0]
----

tab:Java[]

[source, java]
----
include::{javaCodeDir}/DiskCompression.java[tags=configuration, indent=0]
----

tab:C#/.NET[]

tab:C++[unsupported]

--

== Supported Algorithms

The supported compression algorithms include:

* `ZSTD` — supports compression levels from -131072 to 22 (default: 3).
* `LZ4` — supports compression levels from 0 to 17 (default: 0).
* `SNAPPY` —  the Snappy algorithm.
* `SKIP_GARBAGE` — this algorithm only extracts useful data from half-filled pages and does not compress the data.
