> For the complete documentation index, see [llms.txt](https://docs.snowkill.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.snowkill.net/storage/built-in-storages.md).

# Built-in storages

Storage classes implement result log storage and deduplication.

SnowKill checks may run every minute, but normally you want to receive notifications about one query only once. In order to receive notifications only once, the state should be stored somewhere.

Example usage:

```python
snowkill_storage = SnowflakeTableStorage(connection, getenv("SNOWFLAKE_TARGET_TABLE"))
check_results = snowkill_storage.store_and_remove_duplicate(check_results)
```

### Usage notes

Currently all storage classes share the same interface with only one function - `store_and_remove_duplicate`. This is how it works internally:

* Accept list of [CheckResults](/reference/check-result.md);
* Compare each CheckResult with existing data in storage, remove duplicates;
* Store new CheckResults, which includes either results for brand new queries or for existing queries, but with higher [check result level](/implementation-details/check-result-levels.md);
* Return list of newly stored CheckResults;

The returned CheckResults are normally used to send notifications.
