【问题标题】:What give best performance; Shared preference file or SQL database? [duplicate]什么能提供最佳性能;共享首选项文件或 SQL 数据库? [复制]
【发布时间】:2016-06-15 07:01:53
【问题描述】:
为了保存实际的警报,我认为一个小型的私有sql数据库就足够了,我以前也用它来保存数据。但是,我不禁认为创建数据库需要很大的功率所以我可以使用共享首选项文件,而只需使用几个链表或其他东西来存储每个警报的一些参数。这样会占用更少的空间。
但这让我想到,实际上首选的方式是什么?我的意思是性能、完整性、安全性以及需要实现共享首选项文件或 SQL 数据库的工作量。
【问题讨论】:
标签:
android
performance
sqlite
sharedpreferences
【解决方案1】:
以下是我认为的优点和缺点:
Shared Prefs - 用于存储键值对。数据保存在一个私有文件中。没有结构化数据的概念,没有标准化的查询。写入/读取执行磁盘 I/O 操作,因此速度不是很快。
SQLite - 用于存储结构化数据。 db 存储为私有文件。用于查询的 SQL。性能类似于共享首选项。
我不会将共享首选项用于任何类型的更复杂的数据。如果要在数据集上执行搜索,SQLite 是不费吹灰之力的。数据库的大小仅取决于所使用的数据量。如果您对自己存储的内容和存储方式很了解,那么您就不应该看到您的数据库变得失控。
【解决方案2】:
AFAIK SharedPreferences 总是方便更快地访问数据和优化存储。即使是代码方面也更容易实现。
我会为你的场景提出一个想法。
对于警报,您几乎不需要 4 个属性。
Alarm.java
class Alarm{
private String desc;
private Date time;
private boolean snooze;
private int repeat; // 1 - daily ,2- monthly ,3 - yearly ,4 - none
}
检索警报
import java.lang.reflect.Type;
Gson gson = new Gson();
Type type = new TypeToken<List<Alarm>>(){}.getType();
List<Alarm> alarms = gson.fromJson(preferences.getString("alarm",""), type);
添加警报
Gson gson = new Gson();
List<Alarm> alarms = new ArrayList<>();
alarms.add(new Alarm()); // adding alarm
String jsonAlarm = gson.toJson(alarms); //coverting list to json and saving back
editor.put("alarm",jsonAlarm);
editor.commit();