zalecenie Apple nie jest do przechowywania BLOB jest w SQLite baz danych, które są większe niż około 2 kilobajtów.
SQLite organizuje baz danych na stronach. Każda strona jest 4 kilobajtów w rozmiarze. Podczas odczytu danych z pliku bazy danych SQLite ładuje te strony do wewnętrznej pamięci podręcznej stron. Na iPhone myślę Ta skrzynka domyślnie 1 MB w rozmiarze. To sprawia, że czytanie sąsiadujące rekordy bardzo szybko, ponieważ będą one prawdopodobnie w pamięci podręcznej stron już.
Kiedy SQLite odczytuje rekord bazy danych do pamięci odczytuje całą płytę i wszystkich stron, że oscyluje. Więc jeśli płyta zawiera BLOB, może to zająć wiele stron i będzie wyrzucania istniejących stron z pamięci podręcznej i zastąpienie ich stronach rekord Blob.
To nie jest tak źle, jeśli jesteś po prostu poprzez skanowanie i załadunek wszystkie swoje Blobs coś zrobić z nimi (wyświetlanie ich na przykład). Ale jeśli mówisz, że zrobiłem kwerendę, gdzie po prostu chciał, aby uzyskać pewne dane, które są w tym samym wierszu jako BLOB kwerenda ta byłaby znacznie wolniej niż gdyby zapis nie zawierają dużą BLOB.
Tak przynajmniej należy przechowywać swoje dane BLOB w osobnej tabeli. Na przykład:
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) );
Albo jeszcze lepiej, przechowywania danych BLOB jak pliki poza bazą danych SQLite.
Należy pamiętać, że może to być możliwe, aby dostosować rozmiar strony z pamięci podręcznej instrukcji SQL PRAGMA (jeśli nie używasz CoreData).