Episode ini membahas cara kerja persistence di ChromaDB: lokasi storage PersistentClient, strategi backup dan restore, snapshot, serta import-export data dengan parquet dan dump-load collection untuk migrasi antar environment.

Sejak episode 3 kalian sudah memakai PersistentClient — tapi seberapa dalam kalian memahami apa yang terjadi di baliknya? Episode 11 membahas persistence, import, dan export: bagaimana data benar-benar disimpan di disk, bagaimana membackup dan merestore, dan bagaimana memindahkan collection antar environment.
Data di collection kalian adalah aset — terutama setelah episode 10 mengajarkan cara mengisinya dengan rapi. Episode ini memastikan aset itu aman, bisa dipindah, dan tidak bergantung pada satu mesin.
PersistentClient menyimpan semua data ke folder yang kalian tentukan lewat path. Strukturnya bukan satu file tunggal — ChromaDB menggunakan SQLite untuk metadata dan segment files untuk index vektor:
chroma-data/
├── chroma.sqlite3
└── <collection-uuid>/
├── header.bin
└── data_level0.binchroma.sqlite3 menyimpan definisi collection, dokumen, dan metadata. Folder per collection berisi index HNSW dalam format biner. Keduanya harus di-backup bersama — membackup hanya SQLite akan membuat index tidak konsisten.
client = chromadb.PersistentClient(path="/data/chroma")chromadb.PersistentClient(path="/data/chroma") menciptakan folder jika belum ada. Pastikan folder bisa ditulis dan punya ruang cukup — index HNSW memakai space lebih besar dari sekadar dokumen teks.
Cara paling aman dan paling sederhana: hentikan proses yang memakai collection, salin seluruh folder, lalu jalankan kembali:
rsync -a --delete /data/chroma/ /backup/chroma-$(date +%F)/rsync -a --delete /data/chroma/ /backup/chroma-$(date +%F)/ membuat snapshot folder lengkap dengan nama tanggal. Restore tinggal menyalin kembali:
rsync -a /backup/chroma-2026-08-05/ /data/chroma/Menyalin saat ChromaDB sedang menulis bisa menghasilkan file korup. Untuk jadwal backup otomatis, pause penulisan atau gunakan mode client-server dan backup di luar jam puncak.
Warning
Satu file saja tidak cukup untuk backup ChromaDB. Selalu salin seluruh folder path: SQLite berisi metadata dan dokumen, file biner berisi index vektor. Restore sebagian akan menghasilkan collection yang tidak konsisten.
Cara paling portabel untuk memindahkan data: baca seluruh isi collection dan simpan sebagai parquet atau JSON. Langkah pertama, pastikan pandas terinstall:
pip install pandas pyarrowLalu export:
import pandas as pd
data = collection.get(include=["documents", "metadatas", "embeddings"])
df = pd.DataFrame({
"id": data["ids"],
"document": data["documents"],
"metadata": data["metadatas"],
"embedding": data["embeddings"],
})
df.to_parquet("export-artikel.parquet")df.to_parquet("export-artikel.parquet") menghasilkan satu file yang bisa dipindah ke mesin lain. Parquet dipilih karena terkompresi dan cepat dibaca — format ideal untuk data besar.
Untuk mengimport, baca parquet lalu upsert dengan embedding yang sudah tersimpan:
df = pd.read_parquet("export-artikel.parquet")
collection = client.get_or_create_collection("artikel-restored")
collection.upsert(
ids=df["id"].tolist(),
documents=df["document"].tolist(),
metadatas=df["metadata"].tolist(),
embeddings=[list(v) for v in df["embedding"]],
)collection.upsert(ids=df["id"].tolist(), ..., embeddings=[...]) mengembalikan data persis — termasuk embedding asli, sehingga tidak perlu men-embed ulang. Ini pola yang paling aman untuk migrasi data.
Dua strategi migrasi dengan karakter berbeda:
| Strategi | Kecepatan | Cocok untuk |
|---|---|---|
| Copy seluruh folder | Cepat | Environment identik, versi sama |
| Export-import parquet | Lambat tapi fleksibel | Versi berbeda, kolom perlu diubah |
Copy folder paling cepat untuk dev ke staging yang versinya sama. Export-import lebih aman saat ada perbedaan versi atau kalian ingin memfilter data — misalnya hanya memindahkan collection dengan tenant tertentu.
Satu jebakan umum: file storage ChromaDB tidak dijamin kompatibel antar versi mayor. Sebelum memigrasi dengan copy folder, pastikan versi chromadb di kedua environment sama:
pip show chromadb | grep -i versionpip show chromadb | grep -i version di kedua mesin harus menampilkan nomor yang sama. Jika berbeda, gunakan jalur export-import parquet sebagai pengganti copy folder.
Episode 11 memastikan data kalian tidak lagi rapuh: memahami struktur storage SQLite dan index HNSW, melakukan backup dengan rsync, merestore, mengekspor collection ke parquet, dan mengimpornya kembali — termasuk strategi migrasi antar environment yang aman dan konsisten antar versi.
Inti yang harus dibawa pulang:
upsert dengan embeddings asli agar tidak re-embed.Di episode 12 selanjutnya kita akan membahas client-server mode dan settings — menjalankan chroma run, menghubungkan dengan HttpClient, mengatur host dan port, memahami model tenant dan database, serta konfigurasi server untuk deployment lokal versus produksi. Saatnya data kalian keluar dari satu proses.