Hive: apa itu, penyimpanan NoSQL dan pengembangan tanpa kode asli

Penulis: IT Sectr Diterbitkan: 2026-03-13 Waktu membaca: 9 mnt

Hive — penyimpanan NoSQL ringan untuk Flutter yang bekerja tanpa kode asli. Tidak seperti SQLite atau Firebase, Hive tidak memerlukan pustaka asli dan bekerja secara eksklusif melalui Dart. Menurut Pub.dev, 2024, Hive telah diunduh lebih dari 10 juta kali dan digunakan di setiap proyek Flutter ketiga yang memerlukan penyimpanan data lokal tanpa infrastruktur server.

Poin utama

  • Hive — basis data NoSQL dalam Dart murni, tanpa kode asli dan ketergantungan platform
  • Kinerja — hingga 30.000 pembacaan per detik pada perangkat seluler
  • Pengetikan — TypeAdapter untuk objek kustom, tanpa pembuatan kode
  • Ringan — 0 ketergantungan pada Android SDK atau iOS UIKit
  • Reaktif — WatchBox untuk melacak perubahan secara real-time

Apa itu Hive?

Hive — adalah basis data NoSQL yang ditulis sepenuhnya dalam Dart dan tidak memerlukan pustaka asli. Ini dibuat oleh Simon Leiter pada tahun 2019 sebagai alternatif untuk SQLite untuk proyek Flutter. Hive menyimpan data dalam format biner .hive, yang dioptimalkan untuk pembacaan dan penulisan cepat pada perangkat seluler. Format .hive menggunakan skema serialisasi kustom di mana setiap tipe data memiliki prefiks byte sendiri, memungkinkan pembacaan file tanpa pengetahuan awal tentang skema — tidak seperti Protocol Buffers atau FlatBuffers.

Ide utama Hive — kesederhanaan maksimal. Basis data tidak memerlukan inisialisasi mesin asli, tidak menyertakan parser SQL, dan tidak menggunakan refleksi. Semua operasi adalah panggilan langsung fungsi Dart dengan serialisasi biner melalui WriteBuffer dan ReadBuffer.

Menurut survei Flutter Community (2023), Hive berada di 5 besar paket paling banyak digunakan untuk penyimpanan data di Flutter, hanya kalah dari shared_preferences dalam popularitas, tetapi melampauinya dalam fungsionalitas dan kecepatan.

Arsitektur Hive

Hive menggunakan konsep Box — analog dari tabel dalam basis data relasional. Setiap Box adalah file di disk dengan sepasang kunci-nilai. Kunci dapat berupa int atau String, nilai — tipe primitif apa pun, daftar, Map, atau objek kustom melalui TypeAdapter. Box-box terisolasi satu sama lain dan dibuka secara independen.

Keunggulan dibandingkan solusi asli

Hive tidak memerlukan saluran platform (platform channels). Ini berarti ia bekerja sama di Android, iOS, Web, macOS, Windows, dan Linux tanpa konfigurasi tambahan. Untuk proyek yang menargetkan kompilasi web, Hive tetap menjadi satu-satunya solusi NoSQL ringan — SQLite tidak berfungsi di browser. Pada saat yang sama, Hive menggunakan IndexedDB sebagai backend untuk web, memastikan persistensi data juga di lingkungan browser.

Bagaimana cara kerja Hive?

Hive men-serialize data ke format biner saat menulis dan men-deserialize saat membaca. Mekanisme internal didasarkan pada BinaryWriter dan BinaryReader, yang mengemas data ke dalam array byte yang ringkas. Ukuran penyimpanan di disk rata-rata 2–3 kali lebih kecil daripada representasi JSON dari data yang sama.

Saat membuka Box, Hive memuat seluruh file ke dalam RAM. Ini memberikan kecepatan baca yang tinggi (mikrodetik), tetapi membatasi ukuran data: disarankan untuk menyimpan tidak lebih dari 50–100 MB per Box. Untuk volume yang lebih besar, gunakan LazyBox — pemuatan malas rekaman dari disk.

Transaksi dan konkurensi

Hive bekerja single-threaded dalam isolasi Dart-isolate. Operasi tulis dilakukan secara sinkron dengan penguncian file. Untuk akses asinkron, gunakan Hive.openBox() dengan await. Akses bersamaan dari beberapa isolate tidak didukung secara langsung — untuk ini diperlukan mekanisme sinkronisasi terpisah.

Hive vs SharedPreferences dan vs SQLite

Hive menempati ceruk antara SharedPreferences dan SQLite. Ia lebih kompleks daripada SharedPreferences (mendukung objek kustom), tetapi lebih sederhana daripada SQLite (tidak memerlukan kueri SQL). Mari bandingkan karakteristik utamanya.

KarakteristikHiveSharedPreferencesSQLite
Tipe dataSemua (melalui TypeAdapter)Hanya primitifTipe SQL
Kecepatan baca~30.000 ops/s~5.000 ops/s~2.000 ops/s
Kode asliTidak diperlukanDiperlukan (Android)Diperlukan
Dukungan webYaTidakTidak
KompleksitasRendahMinimalSedang
ReaktivitasWatchBoxTidakMelalui ORM

Kapan memilih Hive

Hive optimal untuk volume data kecil: pengaturan aplikasi, cache respons API, antrean sinkronisasi lokal, favorit, dan riwayat penjelajahan. Jika data tidak melebihi 50 MB dan tidak memerlukan kueri relasional — Hive lebih cepat dan lebih sederhana daripada SQLite.

Kapan Hive tidak cocok

Hive tidak mendukung kueri dengan pemfilteran di beberapa bidang, JOIN, fungsi agregat. Jika Anda memerlukan kueri kompleks seperti “pilih semua tugas hari ini dengan prioritas di atas 3” — gunakan SQLite dengan drift atau floor. Hive juga tidak cocok untuk menyimpan lebih dari 100 MB data karena pemuatan ke memori.

Contoh kode dengan Hive

Hive dimulai dengan inisialisasi dan pembukaan Box. Di bawah ini adalah operasi dasar untuk skenario tipikal — menyimpan daftar tugas dalam aplikasi Flutter. Semua contoh berfungsi tanpa panggilan platform asli.

Inisialisasi dan membuka Box

Sebelum menggunakan Hive, Hive.initFlutter() harus dipanggil di fungsi main. Kemudian buka Box melalui Hive.openBox() — hasilnya adalah instance Box yang siap untuk dibaca dan ditulis.

dart
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';

void async main() {
    await Hive.initFlutter();
    final settingsBox = await Hive.openBox('settings');
    runApp(MyApp());
}

Operasi CRUD

Box menyediakan metode put, get, delete dan berisi iterator untuk menelusuri semua rekaman. Kunci dan nilai diketik melalui generik — secara default Box<dynamic> mengizinkan tipe apa pun, tetapi disarankan untuk menentukan tipe yang spesifik.

dart
// Menulis data
final box = await Hive.openBox<String>('tasks');
await box.put('task_1', 'Beli produk');

// Membaca
final task = box.get('task_1');

// Semua kunci
final allTasks = box.values.toList();

// Menghapus
await box.delete('task_1');

// Membersihkan Box
await box.clear();

Pengamatan reaktif melalui WatchBox

WatchBox — ekstensi Box yang memberi tahu pelanggan tentang perubahan. Di Flutter, ini terintegrasi dengan ValueListenableBuilder: ketika nilai apa pun di Box berubah, widget dibangun ulang secara otomatis tanpa memanggil setState.

dart
final watchBox = await Hive.openBox('settings');

// Di widget
ValueListenableBuilder(
    valueListenable: watchBox.listenable(),
    builder: (context, box, _) {
        final counter = box.get('counter') ?? 0;
        return Text('Penghitung: $counter');
    },
)

TypeAdapter dan objek kustom

TypeAdapter — mekanisme Hive untuk serialisasi objek Dart kustom. Adaptor menjelaskan cara mengonversi objek ke format biner (write) dan kembali (read). Tidak seperti json_serializable, TypeAdapter tidak memerlukan refleksi dan bekerja lebih cepat.

Membuat TypeAdapter

Adaptor mengimplementasikan antarmuka TypeAdapter dengan dua metode: read dan write. Kelas didaftarkan melalui Hive.registerAdapter() sebelum membuka Box. Setiap adaptor diberi ID numerik — disimpan dalam file untuk identifikasi tipe.

dart
// Model data
class Task {
    final String title;
    final bool isCompleted;
    Task({required this.title, this.isCompleted = false});
}

// TypeAdapter
class TaskAdapter extends TypeAdapter<Task> {
    @override
    final int typeId = 0;

    @override
    Task read(BinaryReader reader) {
        return Task(
            title: reader.readString(),
            isCompleted: reader.readBool(),
        );
    }

    @override
    void write(BinaryWriter writer, Task obj) {
        writer.writeString(obj.title);
        writer.writeBool(obj.isCompleted);
    }
}

Menghasilkan adaptor melalui pembuatan kode

Untuk proyek dengan banyak model, Hive menyediakan hive_generator dan build_runner. Anotasi @HiveType pada kelas dan @HiveField pada bidang menghasilkan adaptor secara otomatis. Ini berguna ketika model berisi 10+ bidang — menulis read/write secara manual menjadi memakan waktu.

Optimasi kinerja Hive

Hive melakukan pembacaan dari memori, bukan dari disk, yang memberikan kecepatan hingga 30.000 operasi per detik. Untuk optimasi: buka Box sekali dan gunakan kembali di seluruh aplikasi, jangan panggil openBox lagi. Gunakan Hive.box() (getter sinkron) setelah inisialisasi — mengembalikan Box yang sudah dibuka tanpa membuat instance baru.

Hive dengan Provider dan Riverpod

Hive mudah diintegrasikan dengan manajer state Flutter yang populer. Untuk Provider, gunakan ChangeNotifierProvider yang membaca data dari Box saat inisialisasi dan diperbarui melalui listenable. Untuk Riverpod, StreamProvider yang berlangganan WatchBox cocok. Kombinasi semacam itu memberikan pembaruan UI reaktif pada setiap perubahan data di Hive tanpa panggilan setState manual. Dalam proyek Flutter tipikal, arsitektur semacam itu memungkinkan sinkronisasi status antar layar tanpa singleton global.

Pertanyaan yang sering diajukan

Bisakah Hive digunakan tanpa Flutter?

Hive bekerja dalam Dart murni, sehingga dapat digunakan di proyek Dart mana pun: server (Dart VM), konsol, atau AngularDart. Untuk Flutter, hive_flutter dengan inisialisasi jalur penyimpanan terhubung secara terpisah.

Bagaimana cara mengenkripsi data di Hive?

Hive mendukung enkripsi AES-256 melalui parameter encryptionKey saat membuka Box. Kunci harus berupa string 32 byte. Box yang dienkripsi tidak dapat dibaca tanpa kunci — data dilindungi di tingkat file.

Apa perbedaan Hive dengan Isar?

Isar — penerus Hive dari penulis yang sama (Simon Leiter). Isar lebih cepat, mendukung indeks, relasi, dan kueri kompleks. Namun, Hive tetap relevan untuk skenario sederhana di mana kemampuan relasional Isar tidak diperlukan dan untuk proyek di mana ketergantungan minimal penting.

Apakah Hive mendukung migrasi skema?

Hive tidak memiliki migrasi bawaan. Jika struktur TypeAdapter berubah, data lama tidak akan ter-deserialisasi. Solusi: tingkatkan typeId adaptor dan tulis migrasi manual dalam kode, atau gunakan delete untuk kunci lama sebelum menulis yang baru.

Berapa ukuran maksimal Hive Box?

Hive memuat Box sepenuhnya ke dalam memori. Batas yang disarankan adalah 50–100 MB per Box. Jika melebihi, mungkin terjadi penundaan saat membuka Box dan peningkatan konsumsi RAM. Untuk volume yang lebih besar, gunakan beberapa Box atau LazyBox dengan pemuatan malas.

Ringkasan

  • Hive — basis data NoSQL dalam Dart murni, tanpa kode asli dan ketergantungan platform
  • Kecepatan — hingga 30.000 operasi baca per detik pada perangkat seluler
  • TypeAdapter — serialisasi biner objek kustom tanpa refleksi
  • WatchBox — pelacakan perubahan reaktif untuk pembaruan UI otomatis
  • Multiplatform — Android, iOS, Web, macOS, Windows, Linux siap pakai
  • Enkripsi — perlindungan data AES-256 di tingkat file Box
  • Rekomendasi — gunakan Hive untuk cache, pengaturan, dan volume data kecil di proyek Flutter dan Dart

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga