【问题标题】:Realm with fully offline work (never online)完全离线工作的领域(从不在线)
【发布时间】:2021-03-03 00:57:48
【问题描述】:

我试图了解 mongoDB 的每个元素是如何工作的,但我对如何处理脱机感到非常困惑。

前往:https://realm.io/

我读到了:

Realm 的移动数据库是 CoreData 和 SQLite 的开源、对开发人员友好的替代方案。几分钟内开始,几小时内移植您的应用程序,并为您节省数周的工作时间。

然后是提到离线部分的部分:

专为离线使用而设计

这是否意味着 Realm 可以在移动应用中用作完全离线的数据库?

如果我理解正确,这个数据库的工作方式类似于我使用对象/文档存储数据的 Android Room。

因为当我转到“让我们开始”部分时,我被重定向到这里:

https://docs.mongodb.com/realm/get-started/introduction-mobile/

我在哪里读到这部分:

开始之前,您需要一个 MongoDB Atlas 帐户。您可以在 Atlas 入门文档中了解有关创建 Atlas 帐户的更多信息

所以我的第一个问题:为什么我需要 Atlas 帐户?我了解 Atlas 是在云中拥有一个 MongoDB 数据库。如果我想使用离线数据库,为什么需要这个?

我想本教程希望展示所有工具协同工作。所以也许这一步可以跳过。但是后来去 React Native 教程,我看到了这部分:

https://docs.mongodb.com/realm/tutorial/react-native/#std-label-react-native-tutorial

连接到您的 MongoDB 领域应用程序

要让应用与您的后端一起工作,您首先需要实例化 Realm 应用。 Realm 应用程序是 MongoDB Realm 后端的接口。导航到 getRealmApp.js 文件并完成 getRealmApp()

这部分代码似乎很重要:

// Returns the shared instance of the Realm app.
export function getRealmApp() {
  if (app === undefined) {
    const appId = "<your Realm app ID here>"; // Set Realm app ID here.
    const appConfig = {
      id: appId,
      timeout: 10000,
      app: {
        name: "default",
        version: "0",
      },
    };
    app = new Realm.App(appConfig);
  }
  return app;
}

代码迫使我指出我在领域控制台中获得的 AppId。

所以我的第二个问题:如何使这部分离线?我应该跳过appId吗?这行得通吗?

这可能还是 Realm 真的不适合完全离线工作?

【问题讨论】:

    标签: mongodb react-native realm


    【解决方案1】:
    I'm really confused about how the offline is handled.
    

    Realm 是第一个离线数据库,所有数据都存储在本地文件中,如果您使用的是 MongoDB Realm Sync,则稍后会同步到服务器

    这是否意味着Realm可以作为一个完全离线的 移动应用中的数据库?

    当然。如前所述,数据存储在文件中。

    所以我的第一个问题:为什么我需要 Atlas 帐户?

    您不需要 Atlas 帐户即可离线使用。您需要设置一个帐户才能访问 MongoDB 领域控制台并配置一个领域应用程序以进行同步

    这部分代码似乎很重要:

    问题中的代码在您使用 MongoDB Realm Sync 时使用。仅离线使用不需要。

    所以我的第二个问题:如何使这部分离线?我应该只是 跳过appId?这行得通吗?

    您不需要该代码仅用于离线使用。

    这是可能的还是 Realm 不适合完全离线 工作吗?

    它非常适合仅离线工作,如果您想过渡到在线模型,它也非常适合。

    如果您想离线使用 Realm,请参阅文档 Open a Local (Non-Synced) Realm,其中显示

    要打开本地(非同步)领域,请将 Configuration() 对象传递给 Realm.open() 或 new Realm()。下面的示例创建一个 具有定义本地文件的路径属性的配置对象 存储数据的路径。

    const config = {
       schema: [schemas.TaskSchema, schemas.UserSchema, schemas.ProjectSchema],
       path: "./myrealm/data"
    };
    const realm = await Realm.open(config);
    

    一旦你有了领域变量,你就可以在本地使用领域:

    // Query realm for all instances of the "Task" type.
    const tasks = realm.objects("Task");
    

    【讨论】:

    • 所以没有 Altlas 也可以实现 Realm Sync 吗? (同步2个数据库,不上网)
    • @NicolasVERHELST 不。Realm 是一个离线的第一个数据库,因此它可以存在于单个设备上。如果要共享数据,则需要利用 Sync,它允许多个设备访问相同的数据。
    • @FrankFu 请记住,仅在本地时,您需要用仅本地调用替换通常会同步到服务器的 Realm 的任何调用,并删除所有 Auth 和 Team 引用,因为这不是需要。 Realm 已上市并且是一个离线优先的数据库,因此它“必须”离线(本地)和在线工作。 (你有一个很好的观点,也应该有一个纯离线版本的教程,所以也许可以直接与他们联系并提出你的要求。或者去 Realm 论坛发帖;所以这不是正确的论坛那)
    • @Jay 同意。当我接下来遇到困难时,我会在 Realm 论坛上发帖,但我现在已经设法通过 Google 摆脱了它。
    • @AdnanBoota Quick Start 有一些非常好的信息,但最好的资源是 Tutorial: Part 1,它展示了如何设置 离线 待办事项列表,您可以然后稍后在线阅读本教程的其余部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2012-01-14
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多