不久前,Google推出了Cloud Firestore。 Cloud Firestore是基于云的NoSQL数据库,谷歌将其定位为实时数据库的替代品。 在本文中,我想告诉您如何开始使用它。
可能性
Cloud Firestore允许您将数据存储在远程服务器上,轻松访问它并实时监视更改。 该文档对Cloud Firestore和实时数据库进行了很好的比较。
创建并连接到项目
在Firebase控制台中,选择“数据库”,然后单击“创建数据库”。 接下来,选择访问设置。 为了熟悉,测试模式对我们来说足够了,但是在生产上,最好更认真地解决这个问题。 在此处阅读有关访问模式的更多信息。

要配置项目,请执行以下步骤:
- 根据此处的说明将Firebase添加到项目中。
- 将依赖项添加到app / build.gradle
implementation 'com.google.firebase:firebase-firestore:18.1.0'
现在一切就绪。
为了熟悉使用Cloud Firestore的基本技术,我编写了一个简单的应用程序 。 要工作,您需要在Firebase控制台中创建一个项目,并将google-services.json文件添加到Android Studio中的项目中。
数据存储结构
Firestore使用集合和文档来存储数据。 文档是包含任何字段的记录。 文件被合并到集合中。 文档也可能包含嵌套集合,但这在android上不受支持。 如果我们用SQL数据库做一个类比,则集合是一个表,文档是该表中的一个条目。 一个集合可能包含具有不同字段集的文档。
接收和记录数据
为了获取集合的所有文档,以下代码就足够了
remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot ->
在这里,我们要求Tasks集合中的所有文档。
该库允许您使用参数生成查询。 以下代码显示如何按条件从集合中获取文档
remoteDB.collection(“Tasks”) .whereEqualTo("title", "Task1") .get() .addOnSuccessListener { querySnapshot ->
在这里,我们从Tasks集合中请求所有文档,这些文档的标题字段与Task1的值相对应。
收到文件后,可以立即将其转换为我们的数据类
remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot ->
要进行编写,您需要创建一个带有数据的Hashmap(其中,字段名充当键,而该字段的值充当值),并将其传输到库中。 以下代码演示了这一点
val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .add(taskData) .addOnSuccessListener {
在此示例中,将创建一个新文档,Firestore将为其生成ID。 要设置自己的ID,请执行以下操作
val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .document("New task") .set(taskData) .addOnSuccessListener {
在这种情况下,如果没有id等于New task的文档,则将创建该文档,如果存在,则将更新指定的字段。
创建/更新文档的另一种选择
remoteDB.collection("Tasks") .document("New task") .set(mapToRemoteTask(task)) .addOnSuccessListener {
订阅变更
Firestore允许您订阅数据更改。 您可以订阅对集合的更改以及对特定文档的更改
remoteDB.collection("Tasks") .addSnapshotListener { querySnapshot, error ->
querySnapshot.documents-包含所有文档的更新列表
querySnapshot.documentChanges-包含更改列表。 每个对象都包含一个修改后的文档和更改类型。 可能有3种变化
已添加-已添加文档,
已修改-文档已更改,
已删除-文档已删除
加载大量数据
实时数据库为下载大量数据提供了一种不太方便的机制,该机制包括手动编辑json文件并下载。 Firestore开箱即用,不提供任何此类服务。 在我找到一种轻松加载大量信息的方法之前,添加新文档非常不方便。 为了使您不会遇到像我这样的问题,下面我将附上有关如何快速轻松地下载大量数据的说明。 该说明在Internet上找到。
- 安装Node.js和npm
- 通过运行命令安装firebase-admin软件包
npm install firebase-admin --save
- 生成具有收集数据的json文件。 可以在Tasks.json文件中找到一个示例。
- 要下载,我们需要访问密钥。 如何获得它在本文中有很好的描述。
- 在文件export.js中放下您的数据
require('./ firestore_key.json')-具有访问密钥的文件。 我在一个带脚本的文件夹中
<YOU_DATABASE>-您的Firestore基地名称
“ ./json/Tasks.json”-数据所在文件的路径
['created']-类型为时间戳的字段名称列表 - 执行脚本
node export.js
该脚本使用了dalenguyen的发展
结论
我在其中一个项目中使用Cloud Firestore,但没有遇到任何严重问题。 我的一个收藏集中包含大约15,000个文档,并且对其的查询非常快,而且没有使用索引。 将Cloud Firestore与Room和Remote Config结合使用,您可以大大减少对数据库的调用次数,并且不会超出免费限制。 以每天免费的费用,您可以阅读50,000文档,记录20,000和删除20,000。