数据导入和导出

本文属使用Prisma构建GraphQL服务系列。

Prisma使用专用的中间格式导入和导出数据:规范化数据格式(Normalized Data Format,NDF)

+--------------+                    +----------------+                       +------------+
| +--------------+                  |                |                       |            |
| |            | |                  |                |                       |            |
| | SQL        | |  (1) transform   |      NDF       |  (2) chunked upload   |   prisma   |
| | MongoDB    | | +--------------> |                | +-------------------> |            |
| | JSON       | |                  |                |                       |            |
| |            | |                  |                |                       |            |
+--------------+ |                  +----------------+                       +------------+
  +--------------+

在本教程中,您将执行以下步骤:

  • 创建一个Prisma服务
  • 为服务种一些初始数据
  • 导出NDF中的数据
  • 将服务部署到新stage
  • 导入NDF中的数据

创建Prisma服务

(1) 在终端中,切换至您选择的目录并运行以下命令:

prisma init import-example

(2) 当提示使用什么样的模板时,选择Minimal setup: database-only

这创建了一个名为import-example的新目录,其中包含根配置文件prisma.yml以及datamodel.graphql中服务数据模型(data model)的定义。

接着,您将更新数据模型也包括关系。

(3) 打开datamodel.graphql并将内容更改为如下所示:

type User {
  id: ID! @unique
  name: String!
  posts: [Post!]!
}

type Post {
  id: ID! @unique
  title: String!
  author: User!
}

创建初始数据

接下来,您将为该服务创建一些初始数据。

(4)import-example目录中创建一个名为seed.graphql的新文件,并向其添加以下突变:

mutation {
  createUser(data: {
    name: "Sarah",
    posts: {
      create: [
        { title: "GraphQL is awesome" },
        { title: "It really is" },
        { title: "How to GraphQL is the best GraphQL tutorial" }
      ]
    }
  }) {
    id
  }
}

现在你需要告诉CLI你创建了这个文件。您可以通过在prisma.yml中设置seed属性来完成此操作。

(5) 打开prisma.yml并更新其内容,如下所示:

service: import-example
stage: dev

datamodel: datamodel.graphql

# to enable auth, provide
# secret: my-secret
disableAuth: true

seed:
  import: seed.graphql

在部署服务时,CLI现在会将seed.graphql中定义的突变发送到您的服务的API。

(6) 通过运行以下命令来部署Prisma服务:

prisma deploy

(7) 当提示您在何处(即向哪个群集)部署您的Prisma服务时,请选择其中一个公共群集选项:prisma-eu1prisma-us1。 (请注意,在使用Docker进行部署时初始化数据也可以)

CLI现在部署该服务并在seed.graphql中执行突变。为了说明种子数据效果,你可以打开一个GraphQL Playground并发送以下查询:

{
  users {
    name
    posts {
      title
    }
  }
}

Prisma API将返回以下数据:

{
  "data": {
    "users": [
      {
        "name": "Sarah",
        "posts": [
          {
            "title": "GraphQL is awesome"
          },
          {
            "title": "It really is"
          },
          {
            "title": "How to GraphQL is the best GraphQL tutorial"
          }
        ]
      }
    ]
  }
}

导出NDF数据

是时候以标准化数据格式导出了。

(8) 在终端import-example目录中,执行以下命令:

prisma export

这将创建一个名为export-__TIMESTAMP__.zip的新文件,其中__TIMESTAMP__表示导出的确切时间。 zip目录中的文件是NDF文件。要了解更多关于结构的信息,请查看NDF参考文档

部署服务到新地方

接下来,您将通过将服务部署到新stage来创建服务的“克隆”。

(9) 打开prisma.yml并将stage属性设置为新值。同时删除seedcluster属性!

service: import-example
stage: test

datamodel: datamodel.graphql

# to enable auth, provide
# secret: my-secret
disableAuth: true

(10) 再次运行prisma deploy将服务部署到新的test stage。

(11) 像上面一样,当提示您在何处(即向哪个群集)部署您的Prisma服务时,请选择其中一个公共群集选项:prisma-eu1prisma-us1

导入NDF数据

现在服务正在运行,您可以从zip目录导入数据!

(12) 在终端中运行以下命令。请注意,您需要将__DATA__占位符替换为导出的zip目录的路径(例如export-2018-01-13T19:28:25.921Z.zip):

prisma import --data __DATA__

搞定!为了验证导入了数据,你可以在GraphQL Playground打开当前test的stage并重新发送上述查询。

猜你喜欢

转载自blog.csdn.net/weixin_33777877/article/details/87641069