SQLite和共享首选项的优点和缺点
在SQLite数据库和共享首选项中存储信息的好机制是什么?
为什么使用共享偏好? 为什么使用sqlite? 我试图找出它们之间的区别,哪个是更好的数据存储机制,但我无法在Google上find合适的答案。 请帮助我的例子和解释。
这真的取决于你想要存储的数据。
SQLite的
大量相同的结构化数据应该存储在SQLite数据库中,因为数据库是为这种数据而devise的。 由于数据是由数据库进行结构化和pipe理的,因此可以使用诸如SQL之类的查询语言来查询符合特定条件的数据的子集。 这使得可以在数据中进行search。 当然,pipe理和search大量的数据会影响性能,所以从数据库读取数据可能比从SharedPreferences读取数据要慢。
SharedPreferences
SharedPreferences是一个键/值存储区,您可以在某个键下保存数据。 要从商店中读取数据,您必须知道数据的关键。 这使得读取数据非常容易。 但是,存储less量数据非常简单,因为它需要存储和读取大型结构化数据,因为您需要为每个数据定义关键字,除此之外,您不能在数据中进行search,除非您有一定的概念命名密钥。
这个问题有一个可以接受的答案,但是我认为关于速度问题还有更多的话要说。
应用程序的SharedPreferences和Sqlite DB都只是文件,存储在设备文件系统的应用程序目录中。 如果数据量不是很大,Sqlite选项将涉及一个更大,更复杂的文件,对于简单的访问有更多的处理开销。
所以,如果数据的性质并不决定你的select(正如接受的答案中所解释的那样),并且速度很重要,那么你最好使用SharedPreferences。
而读取一些数据往往是显示主要活动的关键path,所以我认为速度通常是非常重要的。
关于速度和效率的最后一个想法是,如果你需要为某些结构化数据使用Sqlite数据库,那么将用户首选项存储在数据库中可能更有效率,因此你不打开第二个文件。 这是一个相当小的考虑因素 – 只有在您需要访问结构化数据和首选项之前,您才可以显示主要活动,这可能是值得考虑的。
我的意思是,这不是速度或大小,而是您想要对数据进行的操作types。
如果您打算对数据进行join , sorting 和其他数据库操作 ,那么请使用Sqlite 。 一个例子是按datesorting数据。
如果你想映射简单的值(如int,boolean,String),那么使用Preferences 。 数据库操作将无法在这里工作,不用说,你需要拥有所有的密钥。 一个例子是用户密码或应用程序configuration。
包含Preferences的大诱惑是当你想用它来存储一个扁平化的POJO(一个序列化的JSON对象)作为String的时候。 有这样的需要实际上是使用Sqlite的标志。 为什么? 因为复杂的数据最终将需要复杂的作品。 想象一下,检索一个可以通过简单的“SELECT … WHERE id = 1”处理的特定条目。 在“首选项”path中,这将是从反序列化到迭代结果的漫长过程。
-
为了存储大量的数据,去SQLite数据库系统。 这将允许用户search数据。
-
另一方面,为了存储less量数据,请转到“共享首选项”。 在这种情况下,庞大的数据库系统是不必要的。 这将允许用户简单地保存数据并加载它们。
忘记SQLLite忘记SharedPreferences,使用Realm。 所有本地存储的单一解决scheme。 您可以使用普通的旧Java对象作为RealmObjects并将数据存储在那里。 您可以将select的查询转换为JSON文件。 不需要parsing整个数据库。 检查这个链接: https : //realm.io/news/introducing-realm/