Jaki jest dobry mechanizm przechowywania informacji w bazie danych SQLite i preferencjach współdzielonych?
Dlaczego warto używać wspólnych preferencji? Dlaczego warto korzystać z sqlite? Próbowałem znaleźć różnicę między nimi i który jest lepszym mechanizmem przechowywania danych, ale nie mogę znaleźć odpowiedniej odpowiedzi w Google. Proszę o pomoc w postaci przykładu i wyjaśnień.
Odpowiedzi:
To naprawdę zależy od danych, które chcesz przechowywać.
SQLite
Duże ilości takich samych danych strukturalnych powinny być przechowywane w bazie danych SQLite, ponieważ bazy danych są zaprojektowane dla tego rodzaju danych. Ponieważ dane są ustrukturyzowane i zarządzane przez bazę danych, można zapytać o podzbiór danych, które pasują do określonych kryteriów, przy użyciu języka zapytań, takiego jak SQL. Umożliwia to przeszukiwanie danych. Oczywiście zarządzanie i wyszukiwanie dużych zbiorów danych wpływa na wydajność, więc odczyt danych z bazy danych może być wolniejszy niż odczyt danych z SharedPreferences.
SharedPreferences
SharedPreferences to magazyn kluczy / wartości, w którym można zapisać dane pod określonym kluczem. Aby odczytać dane ze sklepu, musisz znać klucz danych. To sprawia, że odczyt danych jest bardzo łatwy. Ale tak proste, jak przechowywanie niewielkiej ilości danych jest tak trudne, jak przechowywanie i odczytywanie dużych danych strukturalnych, ponieważ trzeba zdefiniować klucz dla wszystkich danych, ponadto nie można tak naprawdę wyszukiwać w danych, chyba że masz określoną koncepcję nazywanie kluczy.
źródło
To pytanie ma akceptowaną odpowiedź, ale myślę, że na ten temat można powiedzieć więcej - o szybkości.
SharedPreferences aplikacji i Sqlite DB to tylko pliki przechowywane w katalogach aplikacji w systemie plików urządzenia. Jeśli ilość danych nie jest zbyt duża, opcja Sqlite będzie obejmować większy i bardziej skomplikowany plik z większym obciążeniem przetwarzania w celu ułatwienia dostępu.
Tak więc, jeśli charakter danych nie determinuje Twojego wyboru (jak wyjaśniono w zaakceptowanej odpowiedzi), a szybkość ma znaczenie, prawdopodobnie lepiej jest użyć SharedPreferences.
Czytanie niektórych danych często znajduje się na krytycznej ścieżce do wyświetlenia głównej czynności, więc myślę, że szybkość jest często bardzo ważna.
Ostatnia myśl dotycząca szybkości i wydajności - jeśli potrzebujesz użyć bazy danych Sqlite dla niektórych ustrukturyzowanych danych, prawdopodobnie bardziej wydajne jest przechowywanie w bazie danych preferencji użytkownika, aby nie otwierać drugiego pliku. Jest to dość drobna uwaga - prawdopodobnie warta rozważenia tylko wtedy, gdy musisz uzyskać dostęp zarówno do danych strukturalnych, jak i preferencji, zanim będziesz mógł wyświetlić główną aktywność.
źródło
Moim zdaniem nie chodzi o szybkość ani rozmiar, ale rodzaj operacji, które chcesz wykonać na swoich danych.
Jeśli planujesz zrobić przyłączyć , porządek , i inne operacje DB na danych a następnie przejść do Sqlite . Przykładem jest sortowanie danych według daty.
Jeśli chcesz odwzorować proste wartości (takie jak int, boolean, String), użyj Preferencji . Operacje bazy danych nie będą tutaj działać i nie trzeba dodawać, że musisz mieć wszystkie klucze. Przykładem jest hasło użytkownika lub konfiguracja aplikacji.
Wielką pokusą przyjęcia Preferencji jest to, że chcesz go użyć do przechowywania spłaszczonego POJO (serializowanego obiektu JSON) jako String. Posiadanie takiej potrzeby jest właściwie znakiem do korzystania z Sqlite. Czemu ? Ponieważ złożone dane będą ostatecznie wymagały skomplikowanych operacji. Wyobraź sobie, że pobierasz konkretny wpis, który mógłby być obsługiwany przez proste „SELECT ... WHERE id = 1”. Na ścieżce Preferencje będzie to długi proces od deserializacji do iteracji wyników.
źródło
SharedPreferences
kluczy / wartości naraz (np. Oba kluczeuser
ipassword
), aby mieć pewność, że oba klucze są nieustawione lub oba są ustawione.Do przechowywania dużej ilości danych wybierz system bazodanowy SQLite. Umożliwi to użytkownikowi wyszukiwanie danych.
Z drugiej strony, aby przechowywać niewielką ilość danych, przejdź do Preferencji wspólnych. W takim przypadku ogromny system baz danych jest zbędny. Pozwoli to użytkownikowi po prostu zapisać dane i załadować je.
źródło
Zapomnij o SQLLite, zapomnij o SharedPreferences, użyj Realm. Jedno rozwiązanie dla całej Twojej lokalnej pamięci. Możesz używać zwykłych starych obiektów Java jako RealmObjects i przechowywać tam swoje dane. Możesz przekonwertować wybrane zapytania na pliki JSON. Nie ma potrzeby analizowania całej bazy danych. Sprawdź ten link: https://realm.io/news/introducing-realm/
źródło