我每隔几分钟为用户保存一些数据firebase realtime database
(默认情况下为5分钟,但可配置)。数据的关键是Unix时间戳。由于现在数据对于一些老用户而言太大了,我正在寻找在从Android查询数据时过滤/限制数据的方法。
我主要只需要当天的数据。我尝试加载最后1000个条目,然后检查他们的时间戳,看看它们是否符合今天的日期。这可行,但它没有进行优化,有时今天的数据远远超过1000个条目。
那么有什么办法可以在key上查询数据并只获取那些键位于提供值之间的对象?
当前查询:
Query lastQuery = ref.orderByKey().limitToLast(1000);
示例数据结构:
{
"1502437050313": {
"some_data": "some value",
"timestamp": 1502437050313
},
"1502437050500": {
"some_data": "some value",
"timestamp": 1502437050500
}
}
答案 0 :(得分:1)
我想知道如果不是随机获取1000条记录然后比较每条记录的时间戳,您可以确定当天开始的时间戳,并在查询中使用该时间戳来获取记录的时间戳记的位置。大于那个值。
我不熟悉Firebase Java SDK,但在JavaScript中应该已经完成了 -
Query lastQuery = ref.orderByChild("timestamp").startAt(new Date().getTime())
答案 1 :(得分:1)
如果您只需要"今天"的项目,获取它们的最简单方法是计算今天开始的时间戳,如here所示:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long startTime = calendar.getTimeInMillis();
然后您可以使用以下命令查询数据库:
Query query = ref.orderByKey().startAt(startTime);