Flutter এ ObjectBox এবং Hive হলো দুইটি জনপ্রিয় NoSQL ডেটা স্টোরেজ সলিউশন, যা দ্রুত এবং সহজে ডেটা সংরক্ষণ এবং ম্যানেজ করতে সহায়ক। এগুলো SQLite এর বিকল্প হিসেবে ব্যবহৃত হয়, যেখানে ডেটা কীগুলির মাধ্যমে অথবা অবজেক্ট স্টোর করে ম্যানেজ করা যায়। ObjectBox এবং Hive উভয়ই উচ্চ পারফরম্যান্স প্রদান করে এবং সহজে ব্যবহারযোগ্য।
১. ObjectBox
ObjectBox হলো একটি NoSQL ডেটাবেস, যা Flutter এবং Dart এ ব্যবহার করা যায়। এটি Object-Oriented ডেটাবেস হিসেবে কাজ করে, যেখানে ডেটাকে অবজেক্ট আকারে সংরক্ষণ করা হয় এবং তা সহজে অ্যাক্সেস করা যায়। ObjectBox দ্রুত এবং শক্তিশালী, যা বড় আকারের অ্যাপ্লিকেশনেও ব্যবহার করা যায়।
ObjectBox সেটআপ করা:
প্রথমে objectbox এবং objectbox_flutter_libs প্যাকেজ ইনস্টল করুন:
dependencies:
objectbox: ^1.0.0
objectbox_flutter_libs: any
dev_dependencies:
build_runner: ^2.0.0
objectbox_generator: ^1.0.0
ObjectBox এর উদাহরণ:
import 'package:objectbox/objectbox.dart';
@Entity()
class Task {
int id;
String name;
bool isCompleted;
Task({this.id = 0, required this.name, this.isCompleted = false});
}
- @Entity: ক্লাসটিকে একটি ডেটাবেস এনটিটি হিসেবে চিহ্নিত করে।
- id: ObjectBox নিজে থেকে id পরিচালনা করে। এটি স্বয়ংক্রিয়ভাবে জেনারেটেড একটি প্রাথমিক কী।
ObjectBox ডেটাবেস তৈরি করা এবং ব্যবহারের উদাহরণ:
import 'package:flutter/material.dart';
import 'objectbox.g.dart'; // ObjectBox কোড জেনারেশন ফাইল
late Store store; // ডেটাবেস স্টোর
void main() async {
store = await openStore(); // ObjectBox স্টোর খুলছে
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TaskScreen(),
);
}
}
class TaskScreen extends StatefulWidget {
@override
_TaskScreenState createState() => _TaskScreenState();
}
class _TaskScreenState extends State<TaskScreen> {
late final Box<Task> taskBox;
@override
void initState() {
super.initState();
taskBox = store.box<Task>();
_addTask('First Task');
}
void _addTask(String name) {
final task = Task(name: name);
taskBox.put(task); // ডেটা ObjectBox এ সংরক্ষণ করা হচ্ছে
}
List<Task> _getTasks() {
return taskBox.getAll(); // সকল টাস্ক রিট্রিভ করা হচ্ছে
}
@override
Widget build(BuildContext context) {
final tasks = _getTasks();
return Scaffold(
appBar: AppBar(
title: Text('ObjectBox Example'),
),
body: ListView.builder(
itemCount: tasks.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(tasks[index].name),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_addTask('New Task ${tasks.length + 1}');
setState(() {});
},
child: Icon(Icons.add),
),
);
}
}
ObjectBox এর সুবিধা:
- পারফরম্যান্স: ObjectBox দ্রুত ডেটা অ্যাক্সেস এবং ম্যানেজমেন্টের জন্য কার্যকর।
- Object-Oriented: ObjectBox এ ডেটা অবজেক্ট হিসেবে সংরক্ষিত হয়, যা ডেভেলপারদের জন্য সহজে ব্যবস্থাপনাযোগ্য।
- ব্যাকগ্রাউন্ড ডেটা সিঙ্ক: ObjectBox এ ব্যাকগ্রাউন্ড ডেটা সিঙ্ক এবং রিয়েল-টাইম আপডেট সম্ভব।
২. Hive
Hive হলো একটি lightweight এবং দ্রুত NoSQL ডেটাবেস, যা Flutter এ ব্যবহার করা যায়। এটি সাধারণত কীগুলির মাধ্যমে ডেটা সংরক্ষণ করে এবং বিভিন্ন ডেটা টাইপ সাপোর্ট করে। Hive ডেটাবেস ব্লক স্ট্রাকচার ব্যবহার করে, যা উচ্চ পারফরম্যান্স প্রদান করে।
Hive সেটআপ করা:
প্রথমে hive এবং hive_flutter প্যাকেজ ইনস্টল করুন:
dependencies:
hive: ^2.0.0
hive_flutter: ^1.1.0
dev_dependencies:
hive_generator: ^1.0.0
build_runner: ^2.0.0
Hive এর উদাহরণ:
import 'package:hive/hive.dart';
part 'task.g.dart'; // কোড জেনারেশন
@HiveType(typeId: 0)
class Task extends HiveObject {
@HiveField(0)
String name;
@HiveField(1)
bool isCompleted;
Task({required this.name, this.isCompleted = false});
}
- @HiveType এবং @HiveField: এগুলো Hive এর এনটিটি এবং ফিল্ড ডিফাইন করতে ব্যবহৃত হয়।
Hive ডেটাবেস তৈরি করা এবং ব্যবহারের উদাহরণ:
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'task.dart'; // আপনার Task ক্লাস
void main() async {
await Hive.initFlutter();
Hive.registerAdapter(TaskAdapter());
await Hive.openBox<Task>('taskBox');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TaskScreen(),
);
}
}
class TaskScreen extends StatefulWidget {
@override
_TaskScreenState createState() => _TaskScreenState();
}
class _TaskScreenState extends State<TaskScreen> {
final Box<Task> taskBox = Hive.box<Task>('taskBox');
void _addTask(String name) {
final task = Task(name: name);
taskBox.add(task); // ডেটা Hive এ সংরক্ষণ করা হচ্ছে
}
List<Task> _getTasks() {
return taskBox.values.toList(); // সকল টাস্ক রিট্রিভ করা হচ্ছে
}
@override
Widget build(BuildContext context) {
final tasks = _getTasks();
return Scaffold(
appBar: AppBar(
title: Text('Hive Example'),
),
body: ListView.builder(
itemCount: tasks.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(tasks[index].name),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_addTask('New Task ${tasks.length + 1}');
setState(() {});
},
child: Icon(Icons.add),
),
);
}
}
Hive এর সুবিধা:
- Lightweight: Hive খুবই হালকা ওজনের এবং ডিভাইসে খুব কম মেমোরি ব্যবহার করে।
- High Performance: এটি দ্রুত ডেটা রিড এবং রাইট করতে পারে।
- কীগুলির মাধ্যমে স্টোরেজ: কীগুলির মাধ্যমে ডেটা অ্যাক্সেস করা যায়, যা সহজ এবং দ্রুত।
ObjectBox এবং Hive এর তুলনা:
| বৈশিষ্ট্য | ObjectBox | Hive |
|---|---|---|
| পারফরম্যান্স | দ্রুত এবং উচ্চ পারফরম্যান্স প্রদান করে | খুব দ্রুত এবং lightweight |
| ডেটা স্ট্রাকচার | Object-Oriented ডেটা স্ট্রাকচার | কীগুলির মাধ্যমে ডেটা সংরক্ষণ |
| ব্যবহারিক ক্ষেত্র | বড় এবং জটিল অ্যাপ্লিকেশন | ছোট থেকে মাঝারি আকারের অ্যাপ্লিকেশন |
| কোড জেনারেশন | Build Runner ব্যবহার করে কোড জেনারেশন করতে হয় | কোড জেনারেশন করতে হয়, তবে সেটআপ সহজ |
| ডেটা স্টোরেজ | ব্লক ডেটা এবং স্ট্রাকচার্ড ডেটা সাপোর্ট করে | ডেটা কীগুলির মাধ্যমে এবং ব্লক স্ট্রাকচারে |
কোনটি ব্যবহার করবেন:
- ObjectBox: যদি আপনার অ্যাপ্লিকেশন বড় এবং জটিল হয় এবং Object-Oriented ডেটা ব্যবস্থাপনার প্রয়োজন হয়, তাহলে ObjectBox একটি ভালো পছন্দ।
- Hive: যদি আপনার অ্যাপ্লিকেশন ছোট থেকে মাঝারি আকারের এবং দ্রুত ডেটা সংরক্ষণের প্রয়োজন হয়, তাহলে Hive একটি কার্যকর সমাধান।
Flutter এ ObjectBox এবং Hive উভয়ই শক্তিশালী এবং কার্যকরী NoSQL ডেটা স্টোরেজ সলিউশন, যা অ্যাপ্লিকেশনের ডেটা দ্রুত এবং নিরাপদে সংরক্ষণ করতে সহায়তা করে। আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুযায়ী সঠিক ডেটা স্টোরেজ সমাধান বেছে নিন।
Read more