Apple'ın öneri ~ 2 kilobayt daha büyük SQLite veritabanlarında BLOB en saklamak için değil.
SQLite sayfalarına veritabanlarını düzenler. Her sayfa boyutunda 4 kilobayttır. Eğer SQLite veritabanı dosyasından veri okumak zaman iç sayfalardan önbelleğine bu sayfaları yükler. iPhone'da ben boyutu 1 megabayt için bu önbellek varsayılan düşünüyorum. Bu muhtemelen zaten sayfa önbellekte olacaktır çünkü çok hızlı komşu kayıtları okuma yapar.
SQLite belleğe veritabanı kaydını okuduğunda onu tüm kaydı ve kaplar tüm sayfaları okur. kaydınızın bir BLOB içeriyorsa Yani, birçok sayfa işgal olabilir ve önbellekten mevcut sayfaları çıkartma ve BLOB kaydın sayfaları ile bunların yerine edilecektir.
Eğer sadece üzerinden tarayıp onlarla bir şeyler (örneğin da ekran) yapmak için tüm lekeler yüklüyorsanız o kadar kötü değil. demek Ama eğer sadece bu sorgu rekor büyük BLOB içermiyormuşçasına çok daha yavaş olacağını DAMLA aynı satırda olduğunu bazı verileri almak isteyen bir sorgu yaptılar.
Yani en azından ayrı bir tabloda BLOB veri depolamak gerekir. Örneğin:
CREATE TABLE blobs ( id INTEGER PRIMARY KEY, data BLOB );
CREATE TABLE photos ( id INTEGER PRIMARY KEY, name TEXT, blob_id INTEGER,
FOREIGN KEY(blob_id) REFERENCES blobs(id) );
Ya da daha iyisi, SQLite veritabanında dışında dosyaları gibi BLOB verileri depolamak.
Onunla sayfa önbellek boyutunu oynamak mümkün olabileceğini unutmayın SQL PRAGMA ifadeleri (eğer CoreData kullanmıyorsanız).