تكرار السؤال: …
الإجابة المختصرة
عندما يحتوي التطبيق على آلاف السجلات المرتبطة (Relations)، أو يحتاج لعمليات فرز وبحث نصي معقدة، أو عند بناء تطبيقات تعمل كلياً دون اتصال بالإنترنت (Offline-first Apps).
الشرح
تخزين مصفوفات ضخمة داخل Key-Value storage يجبرك على قراءة وتحليل كامل مصفوفة الـ JSON في الذاكرة لتعديل عنصر واحد فقط. قواعد بيانات مثل SQLite تتيح استعلامات SQL سريعة وفهارس واسترجاع الصفوف المطلوبة فقط. بينما توفر WatermelonDB استجابة تفاعلية فائقة السرعة بفضل بنية التهيئة الكسولة (Lazy Loading) المبنية على SQLite.
مثال بالكود
import * as SQLite from "expo-sqlite";
const db = await SQLite.openDatabaseAsync("chat.db");
await db.execAsync(`
CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY,
conversation_id INTEGER NOT NULL,
body TEXT NOT NULL,
timestamp INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_messages_conv_ts ON messages (conversation_id, timestamp DESC);
`);
const latest = await db.getAllAsync(
"SELECT * FROM messages WHERE conversation_id = ? ORDER BY timestamp DESC LIMIT 50",
[conversationId],
);أخطاء شائعة
- تخزين قاعدة بيانات كاملة للرسائل أو المنتجات في ملفات JSON داخل AsyncStorage ومحاولة فلترتها بدوال filter() في الجافاسكربت.