数据导入和导出

作者: guog | 来源:发表于2018-05-02 02:37 被阅读17次

    本文属使用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并重新发送上述查询。

    相关文章

      网友评论

        本文标题:数据导入和导出

        本文链接:https://www.haomeiwen.com/subject/ekkqrftx.html