Hive: یہ کیا ہے، NoSQL اسٹوریج اور مقامی کوڈ کے بغیر ترقی

مصنف: IT Sectr اشاعت: 2026-03-13 مطالعے کا وقت: 9 منٹ

Hive Flutter کے لیے ایک ہلکا پھلکا NoSQL اسٹوریج ہے جو مقامی کوڈ کے بغیر کام کرتا ہے۔ SQLite یا Firebase کے برعکس، Hive کو مقامی لائبریریوں کی ضرورت نہیں ہے اور یہ صرف Dart کے ذریعے کام کرتا ہے۔ Pub.dev، 2024 کے مطابق، Hive کو 10 ملین سے زیادہ بار ڈاؤن لوڈ کیا گیا ہے اور ہر تیسرے Flutter پروجیکٹ میں استعمال کیا جاتا ہے جسے سرور کے بنیادی ڈھانچے کے بغیر مقامی ڈیٹا اسٹوریج کی ضرورت ہوتی ہے۔

اہم نکات

  • Hive — خالص Dart میں NoSQL DB، مقامی کوڈ یا پلیٹ فارم انحصار کے بغیر
  • کارکردگی — موبائل ڈیوائس پر فی سیکنڈ 30,000 ریڈ تک
  • ٹائپنگ — حسب ضرورت آبجیکٹ کے لیے TypeAdapter، کوڈ جنریشن کے بغیر
  • ہلکا پن — Android SDK یا iOS UIKit سے صفر انحصار
  • ری ایکٹو — ریئل ٹائم میں تبدیلیوں کو ٹریک کرنے کے لیے WatchBox

Hive کیا ہے؟

Hive ایک NoSQL ڈیٹا بیس ہے جو مکمل طور پر Dart میں لکھا گیا ہے اور اسے کسی مقامی لائبریری کی ضرورت نہیں ہے۔ اسے Simon Leiter نے 2019 میں Flutter پروجیکٹس کے لیے SQLite کے متبادل کے طور پر بنایا تھا۔ Hive ڈیٹا کو بائنری .hive فارمیٹ میں ذخیرہ کرتا ہے جو موبائل آلات پر تیز پڑھنے اور لکھنے کے لیے بہتر بنایا گیا ہے۔ .hive فارمیٹ ایک حسب ضرورت سیریلائزیشن اسکیم استعمال کرتا ہے جہاں ہر ڈیٹا کی قسم کا اپنا بائٹ پریفکس ہوتا ہے، جو Protocol Buffers یا FlatBuffers کے برعکس، پہلے سے اسکیما معلومات کے بغیر فائل پڑھنے کی اجازت دیتا ہے۔

Hive کا بنیادی خیال زیادہ سے زیادہ سادگی ہے۔ ڈیٹا بیس کو کسی مقامی انجن کی ابتدا کی ضرورت نہیں ہے، اس میں کوئی SQL پارسر شامل نہیں ہے اور یہ ریفلیکشن استعمال نہیں کرتا ہے۔ تمام آپریشنز WriteBuffer اور ReadBuffer کے ذریعے بائنری سیریلائزیشن کے ساتھ براہ راست Dart فنکشن کالز ہیں۔

Flutter Community سروے (2023) کے مطابق، Hive Flutter میں سب سے زیادہ استعمال ہونے والے ٹاپ 5 ڈیٹا اسٹوریج پیکیجز میں شامل ہے، مقبولیت میں صرف shared_preferences کے بعد دوسرے نمبر پر ہے، لیکن فعالیت اور رفتار میں اس سے آگے ہے۔

Hive کا فن تعمیر

Hive Box کے تصور کا استعمال کرتا ہے — رلیشنل ڈیٹا بیس میں ٹیبل کے مشابہ۔ ہر Box ڈسک پر ایک فائل ہے جس میں کلید-قدر کے جوڑوں کا ایک سیٹ ہوتا ہے۔ کلید int یا String ہو سکتی ہے، قدر کوئی بھی ابتدائی قسم، فہرست، Map یا TypeAdapter کے ذریعے حسب ضرورت آبجیکٹ ہو سکتی ہے۔ Boxes ایک دوسرے سے الگ تھلگ ہوتے ہیں اور آزادانہ طور پر کھولے جاتے ہیں۔

مقامی حل پر فوائد

Hive کو پلیٹ فارم چینلز کی ضرورت نہیں ہے۔ اس کا مطلب ہے کہ یہ Android، iOS، Web، macOS، Windows اور Linux پر بغیر کسی اضافی ترتیب کے ایک جیسا کام کرتا ہے۔ ویب بلڈ کو نشانہ بنانے والے پروجیکٹس کے لیے، Hive واحد ہلکا پھلکا NoSQL حل ہے — SQLite براؤزر میں کام نہیں کرتا ہے۔ Hive ویب کے لیے بیک اینڈ کے طور پر IndexedDB کا استعمال کرتا ہے، جو براؤزر کے ماحول میں بھی ڈیٹا کی پائیداری کو یقینی بناتا ہے۔

Hive کیسے کام کرتا ہے؟

Hive لکھنے پر ڈیٹا کو بائنری فارمیٹ میں سیریلائز کرتا ہے اور پڑھنے پر ڈی سیریلائز کرتا ہے۔ اندرونی طریقہ کار BinaryWriter اور BinaryReader پر مبنی ہے، جو ڈیٹا کو کمپیکٹ بائٹ صفوں میں پیک کرتے ہیں۔ ڈسک پر اسٹوریج کا سائز اوسطاً ایک ہی ڈیٹا کی JSON نمائندگی سے 2–3 گنا چھوٹا ہوتا ہے۔

Box کھولتے وقت، Hive پوری فائل کو RAM میں لوڈ کرتا ہے۔ یہ تیز پڑھنے کی رفتار (مائیکرو سیکنڈ) فراہم کرتا ہے لیکن سائز کی حد لگاتا ہے: فی Box 50–100 MB سے زیادہ ذخیرہ نہ کرنے کی سفارش کی جاتی ہے۔ بڑے حجم کے لیے، LazyBox استعمال کریں — ڈسک سے ریکارڈز کی سست لوڈنگ۔

لین دین اور ہم آہنگی

Hive Dart آئسولیٹ کے اندر سنگل تھریڈڈ کام کرتا ہے۔ تحریری آپریشنز فائل لاکنگ کے ساتھ ہم آہنگی سے انجام پاتے ہیں۔ غیر ہم آہنگ رسائی کے لیے، await کے ساتھ Hive.openBox() استعمال کریں۔ متعدد آئسولیٹس سے بیک وقت رسائی براہ راست تعاون یافتہ نہیں ہے — اس کے لیے علیحدہ ہم آہنگی میکانزم کی ضرورت ہے۔

Hive بمقابلہ SharedPreferences اور بمقابلہ SQLite

Hive SharedPreferences اور SQLite کے درمیان ایک جگہ رکھتا ہے۔ یہ SharedPreferences سے زیادہ پیچیدہ ہے (حسب ضرورت آبجیکٹ کو سپورٹ کرتا ہے) لیکن SQLite سے آسان ہے (SQL سوالات کی ضرورت نہیں)۔ آئیے کلیدی خصوصیات کا موازنہ کریں۔

خصوصیتHiveSharedPreferencesSQLite
ڈیٹا کی اقسامکوئی بھی (TypeAdapter کے ذریعے)صرف ابتدائیSQL اقسام
پڑھنے کی رفتار~30,000 ops/s~5,000 ops/s~2,000 ops/s
مقامی کوڈدرکار نہیںدرکار (Android)درکار
ویب سپورٹہاںنہیںنہیں
پیچیدگیکمکم سے کمدرمیانی
رد عملWatchBoxنہیںORM کے ذریعے

Hive کب منتخب کریں

Hive ڈیٹا کی چھوٹی مقدار کے لیے بہترین ہے: ایپ کی ترتیبات، API جوابات کا کیش، مقامی مطابقت پذیری قطار، پسندیدہ اور براؤزنگ ہسٹری۔ اگر ڈیٹا 50 MB سے زیادہ نہ ہو اور رلیشنل سوالات کی ضرورت نہ ہو — Hive SQLite سے تیز اور آسان ہے۔

Hive کب موزوں نہیں ہے

Hive متعدد فیلڈز کے ذریعے فلٹرنگ، JOIN یا ایگریگیٹ فنکشنز والے سوالات کو سپورٹ نہیں کرتا ہے۔ اگر آپ کو «آج کے لیے 3 سے زیادہ ترجیح والے تمام کام منتخب کریں» جیسے پیچیدہ سوالات کی ضرورت ہے — تو drift یا floor کے ساتھ SQLite استعمال کریں۔ Hive میموری میں لوڈ ہونے کی وجہ سے 100 MB سے زیادہ ڈیٹا ذخیرہ کرنے کے لیے بھی موزوں نہیں ہے۔

Hive کے ساتھ کوڈ کی مثالیں

Hive ابتدا اور Box کھولنے سے شروع ہوتا ہے۔ ذیل میں ایک عام منظر نامے کے لیے بنیادی آپریشنز دیے گئے ہیں — Flutter ایپلیکیشن میں کاموں کی فہرست ذخیرہ کرنا۔ تمام مثالیں مقامی پلیٹ فارم کالز کے بغیر کام کرتی ہیں۔

ابتدا اور Box کھولنا

Hive استعمال کرنے سے پہلے، main فنکشن میں Hive.initFlutter() کو کال کرنا ضروری ہے۔ پھر Hive.openBox() کے ذریعے Box کھولیں — نتیجہ پڑھنے اور لکھنے کے لیے تیار Box مثال ہوگا۔

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());
}

CRUD آپریشنز

Box put، get، delete طریقے اور تمام اندراجات کو عبور کرنے کے لیے ایک iterator فراہم کرتا ہے۔ کنجیاں اور قدریں جنرکس کے ذریعے ٹائپ کی جاتی ہیں — ڈیفالٹ طور پر Box<dynamic> کسی بھی قسم کو قبول کرتا ہے، لیکن ایک مخصوص قسم بتانے کی سفارش کی جاتی ہے۔

dart
// ڈیٹا لکھیں
final box = await Hive.openBox<String>('tasks');
await box.put('task_1', 'گروسری خریدیں');

// پڑھیں
final task = box.get('task_1');

// تمام کنجیاں
final allTasks = box.values.toList();

// حذف کریں
await box.delete('task_1');

// Box صاف کریں
await box.clear();

WatchBox کے ذریعے ری ایکٹو مشاہدہ

WatchBox Box کی توسیع ہے جو سبسکرائبرز کو تبدیلیوں کے بارے میں مطلع کرتی ہے۔ Flutter میں، یہ ValueListenableBuilder کے ساتھ ضم ہوتا ہے: جب Box میں کوئی بھی قدر بدلتی ہے، تو setState کال کیے بغیر widget خود بخود دوبارہ تعمیر ہو جاتا ہے۔

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

// ویجیٹ میں
ValueListenableBuilder(
    valueListenable: watchBox.listenable(),
    builder: (context, box, _) {
        final counter = box.get('counter') ?? 0;
        return Text('کاؤنٹر: $counter');
    },
)

TypeAdapter اور حسب ضرورت آبجیکٹ

TypeAdapter حسب ضرورت Dart آبجیکٹ کو سیریلائز کرنے کے لیے Hive کا طریقہ کار ہے۔ اڈاپٹر بیان کرتا ہے کہ آبجیکٹ کو بائنری فارمیٹ (write) میں اور واپس (read) کیسے تبدیل کیا جائے۔ json_serializable کے برعکس، TypeAdapter کو ریفلیکشن کی ضرورت نہیں ہے اور یہ تیز تر ہے۔

TypeAdapter بنانا

اڈاپٹر TypeAdapter انٹرفیس کو دو طریقوں کے ساتھ لاگو کرتا ہے: read اور write۔ کلاس Box کھولنے سے پہلے Hive.registerAdapter() کے ذریعے رجسٹر کی جاتی ہے۔ ہر اڈاپٹر کو ایک عددی ID دی جاتی ہے — یہ قسم کی شناخت کے لیے فائل میں محفوظ کی جاتی ہے۔

dart
// ڈیٹا ماڈل
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);
    }
}

کوڈ جنریشن کے ذریعے اڈاپٹر تیار کرنا

بڑی تعداد میں ماڈل والے پروجیکٹس کے لیے، Hive hive_generator اور build_runner فراہم کرتا ہے۔ کلاس پر @HiveType اور فیلڈز پر @HiveField اینوٹیشن خود بخود اڈاپٹر تیار کرتے ہیں۔ یہ اس وقت آسان ہوتا ہے جب ماڈل میں 10+ فیلڈز ہوں — دستی read/write لکھنا تھکا دینے والا ہو جاتا ہے۔

Hive کارکردگی کی بہتری

Hive ڈسک کے بجائے میموری سے پڑھتا ہے، جو فی سیکنڈ 30,000 آپریشنز تک کی رفتار فراہم کرتا ہے۔ بہتری کے لیے: Box کو ایک بار کھولیں اور پوری ایپ میں اسے دوبارہ استعمال کریں، بار بار openBox کو کال نہ کریں۔ ابتدا کے بعد Hive.box() (ہم آہنگ گیٹر) استعمال کریں — یہ نیا نمونہ بنائے بغیر پہلے سے کھلا ہوا Box لوٹاتا ہے۔

Provider اور Riverpod کے ساتھ Hive

Hive مشہور Flutter اسٹیٹ مینیجرز کے ساتھ آسانی سے ضم ہو جاتا ہے۔ Provider کے لیے، ChangeNotifierProvider استعمال کریں جو ابتدا پر Box سے ڈیٹا پڑھتا ہے اور listenable کے ذریعے اپ ڈیٹ ہوتا ہے۔ Riverpod کے لیے، WatchBox پر سبسکرائب کردہ StreamProvider موزوں ہے۔ یہ مجموعہ دستی setState کالز کے بغیر Hive میں ہر ڈیٹا تبدیلی پر ری ایکٹو UI اپ ڈیٹس فراہم کرتا ہے۔ ایک عام Flutter پروجیکٹ میں، یہ فن تعمیر عالمی سنگلٹن کے بغیر اسکرینوں کے درمیان حالت کو ہم آہنگ کرنے کی اجازت دیتا ہے۔

اکثر پوچھے گئے سوالات

کیا Hive کو Flutter کے بغیر استعمال کیا جا سکتا ہے؟

Hive خالص Dart پر کام کرتا ہے، لہذا اسے کسی بھی Dart پروجیکٹ میں استعمال کیا جا سکتا ہے: سرور سائڈ (Dart VM)، کنسول یا AngularDart۔ Flutter کے لیے، اسٹوریج کے راستوں کی ابتدا کے لیے اضافی طور پر hive_flutter کی ضرورت ہے۔

Hive میں ڈیٹا کو کیسے انکرپٹ کیا جائے؟

Hive Box کھولتے وقت encryptionKey پیرامیٹر کے ذریعے AES-256 انکرپشن کو سپورٹ کرتا ہے۔ کلید 32 بائٹ کی سٹرنگ ہونی چاہیے۔ انکرپٹڈ Box کو کلید کے بغیر نہیں پڑھا جا سکتا — ڈیٹا فائل کی سطح پر محفوظ ہے۔

Hive Isar سے کیسے مختلف ہے؟

Isar اسی مصنف (Simon Leiter) کا Hive کا جانشین ہے۔ Isar تیز تر ہے، انڈیکس، تعلقات اور پیچیدہ سوالات کو سپورٹ کرتا ہے۔ تاہم، Hive سادہ منظرناموں کے لیے متعلقہ رہتا ہے جہاں Isar کی رلیشنل صلاحیتوں کی ضرورت نہیں ہے، اور ان پروجیکٹس کے لیے جہاں کم سے کم انحصار اہم ہے۔

کیا Hive اسکیما مائیگریشن کو سپورٹ کرتا ہے؟

Hive میں بلٹ ان مائیگریشن نہیں ہے۔ اگر TypeAdapter کا ڈھانچہ بدل جاتا ہے، تو پرانا ڈیٹا ڈی سیریلائز نہیں ہوگا۔ حل: اڈاپٹر کا typeId بڑھائیں اور کوڈ میں دستی مائیگریشن لکھیں، یا نیا لکھنے سے پہلے پرانی کلید کے لیے delete استعمال کریں۔

Hive Box کا زیادہ سے زیادہ سائز کتنا ہے؟

Hive Box کو مکمل طور پر میموری میں لوڈ کرتا ہے۔ تجویز کردہ حد فی Box 50–100 MB ہے۔ اس سے تجاوز کرنے پر Box کھولنے میں تاخیر اور RAM کی کھپت میں اضافہ ہو سکتا ہے۔ بڑے حجم کے لیے، متعدد Boxes یا سست لوڈنگ کے ساتھ LazyBox استعمال کریں۔

خلاصہ

  • Hive — خالص Dart میں NoSQL DB، مقامی کوڈ یا پلیٹ فارم انحصار کے بغیر
  • کارکردگی — موبائل آلات پر فی سیکنڈ 30,000 ریڈ آپریشنز تک
  • TypeAdapter — ریفلیکشن کے بغیر حسب ضرورت آبجیکٹ کا بائنری سیریلائزیشن
  • WatchBox — خودکار UI اپ ڈیٹس کے لیے ری ایکٹو تبدیلی ٹریکنگ
  • کراس پلیٹ فارم — Android، iOS، Web، macOS، Windows، Linux آؤٹ آف دی باکس
  • انکرپشن — Box فائل کی سطح پر AES-256 ڈیٹا تحفظ
  • سفارش — Flutter اور Dart پروجیکٹس میں کیشنگ، ترتیبات اور ڈیٹا کے چھوٹے حجم کے لیے Hive استعمال کریں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں