В моем приложении есть фиксированные данные, которые требуются в соответствии с датой.
Мое намерение:
Избегайте необходимости обновлять эти данные каждый год, потому что они всегда одинаковы.
Поместите каждую часть информации относительно дня, который ей соответствует.
В соответствии с тем, что обсуждается в этом вопросе: Как организовать связанные временные и фиксированные данные в Firestore? , я решил сохранить фиксированные данные в коллекции, а затем создать коллекцию calendar
, которая даст знать, учитывая дату, какому контенту соответствует.
В то же время я хочу избежать наименьшего количества потребления: согласно моей модели, сначала будет прочитано calendar
в поисках содержимого, соответствующего этой дате в соответствии с данной датой. Затем содержимое будет искать по этой ссылке.
Будет два чтения , одно для календаря, а другое для коллекции с фиксированным содержанием.
Коллекция calendar
и коллекции oficio
и laudes
будут синхронизироваться и кэшироваться приложением.
Фиксированный контент
Firestore-root
|
--- liturgia (collection)
| |
| --- lh (documents)
| |
| --- oficio (collection)
| |
| --- 03070101 (documents)
| |
| --- himno: "Today himno for today oficio"
| |
| --- read: "Today read for today oficio"
|
| --- 03070102 (documents)
| |
| --- himno: "Today himno for today oficio"
| |
| --- read: "Today read for today oficio"
|
| --- 09010325 (documents)
| |
| --- himno: "Today himno for today oficio"
| |
| --- read: "Today read for today oficio"
|
| --- laudes (collection)
| |
| --- 03000101 (documents)
| |
| --- himno: "Today himno for today laudes"
| |
| --- read: "Today read for today laudes"
|
| --- 03000102 (documents)
| |
| --- himno: "Today himno for today laudes"
| |
| --- read: "Today read for today laudes"
|
| --- 09010325 (documents)
| |
| --- himno: "Today himno for today laudes"
| |
| --- read: "Today read for today laudes"
Обновляемый контент
Firestore-root
|
--- calendar (collection)
| |
| --- 20190325 (documents)
| |
| --- oficio: "09010325"
| |
| --- laudes: "09010325"
| |
| --- tercia: "03000301"
|
|
| --- 20190326 (documents)
| |
| --- oficio: "03070102"
| |
| --- laudes: "03000102"
| |
| --- tercia: "03000102"
Код
Код для получения документа oficio
на сегодняшний день, а именно:
| --- 09010325 (documents)
| |
| --- himno: "Today himno for today oficio"
| |
| --- read: "Today read for today oficio"
есть
String todayDate="20190325"; //getted automatically
final DocumentReference docRef = db.collection("calendar").document(todayDate);
docRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot snapshot,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
//launchVolley();
return;
}
if (snapshot != null && snapshot.exists()) {
String contentPath=snapshot.getString("oficio");
DocumentReference docRef = db.collection("liturgia").document("lh").collection("oficio")
.document(contentPath);
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
mBreviario = documentSnapshot.toObject(Breviario.class);
Log.w(TAG, documentSnapshot.toString());
showData();
}
});
} else {
//launchVolley();
}
}
});
Относительно этого сценария у меня есть два сомнения:
Я делаю две консультации , одну для получения ссылки в соответствии с сегодняшней датой и другую для получения фиксированного содержания в соответствии с полученной ссылкой. Поскольку я планирую кэшировать календарь, будет ли мне выставляться счет, когда приложение считывает календарь из кэша или только когда оно читает календарь в Firebase?
Поскольку также фиксированные коллекции будут кэшироваться и содержать много информации: не менее 365 документов для каждой группы (oficio
, laudes
и т. Д.). Как кеш будет работать в этом смысле по отношению к календарю. Я хочу расставить приоритеты для кэша calendar
и добавить другое содержимое в соответствии с лимитом кэша.