暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

#gStore-weekly | gStore防踩坑手册(下)

图谱学苑 2022-06-16
557
本期继续上次防踩坑手册,详细讲解在ghttp接口使用过程中的注意事项。

1.1.     checkpoint接口调用

使用ghttp接口对gStore数据库进行更新的时候需要调用checkpoint接口,否则更新的数据无法实时同步到磁盘,并且如果ghttp服务器异常则会丢失数据(例如:直接kill ghttp进程),包括以下几种更新数据库的情况:
  • 使用sparql 执行insert data或者 delete data语句;

  • 调用batchInsert接口;

  • 调用batchRemove接口。

1.2.     monitor接口

注意该接口在0.8版本和0.9.1版本调用成功后返回的参数中"triple num"(三元组数量)、"entity num"(实体数量)、"literal num"(字符数量即属性值)、"predicate num"(谓词数量)、"connection num"(连接数量)这几个参数返回值中间有一个空格monitor接口返回示例:
    {
    "StatusCode"0
    "StatusMsg""success"
    "database""LDBC(勿删)"
    "creator""root",
    "built_time": "2022-03-17 16:56:56",
    "triple num": "4028511",
    "entity num": 586530,
    "literal num": 1093420,
    "subject num": 312150,
    "predicate num": 40,
    "connection num": 0
    }

    1.3.     load接口

    load接口是将某一个数据库加载到内存中,在以下场景下都会用到:
    • 若命令行启动ghttp服务的时候,没有指定数据库,可以在调用load接口的参数进行指定使用某个数据库,来实现多个数据库之间的切换;
    • 执行gquery、batchInsert、batchRemove等需要查询数据或者更新数据的接口时,如果执行的数据库没有提前加载到内存中会报错:
      {
      "StatusCode": 1005,
      "StatusMsg": "Database not load yet."
      }
      • 接口要使用事务或者使用高级函数时,load接口里面要设置参数load_csr=true,否则无法使用事务或高级函数,如果数据库已经load到数据库中,则需要限执行unload接口,在执行load接口传入参数load_csr=true,接口参数如下

      1.4.     关闭ghttp服务

      ghttp不要用kill来关闭,可能导致ghttp服务中更新的数据丢失,也可能导致下次ghttp服务无法启动,提示端口号占用,必须要删除gStore根目录下面的system.db/port.txt文件后,才能重新启动。

      1.5.     调用ghttp接口

      调用ghttp接口时,用post方式要设置字符编码utf-8,否则服务端乱码。

      1.6.     事务操作

      做为数据库系统gStore也同样具备事务机制,但是gStore的事务操作需要注意以下事项:
      • 首先需要启动事务,即调用begin接口。该接口返回了一个重要的值TID(事务ID),该参数会在后续的tquery接口和commit接口中都会使用到;
      begin接口返回值参数

      • begin接口调用成功后,再进行您的事务操作,但是执行的时候是使用tquery接口,执行tquery接口的时候就需要传入第一步begin接口返回的TID值。而且这里要注意不是调用query接口,而是tquery 接口;
      tquery接口传入参数
      • 果要提交事务,则调用commit接口进行事务提交,同样执行该接口也需要传入第一步begin接口返回的TID值

      commit接口传入参数

      • 如果多次执行begin和tquery接口,但是都没有执行commit接口,那么gStore只保留最后一次事务操作不提交,然后将之前所有的事务操作都进行了自动回滚;
      • 如果要回滚事务,则调用rollback接口,同样执行该接口也需要传入第一步begin接口返回的TID值。

      rollback接口传入参数

      1.7.     backup接口

      备份接口需要注意以下情况:

      • 调用接口传入参数backup_path如果为空,则会默认备份到gStore根目录下的backups目录;
      • backup_path参数可以传入相对路径,相对路径的根目录为gStore的安装目录;
      • backup_path也可以传入绝对路径;
      • 备份成功后会返回一个backupfilepath参数,该参数为数据库的备份文件路径,需要用户记录下来以作为后续调用restore还原接口时的传入参数。
      backup接口传入参数

      backup接口返回值

      1.8.     export接口

      • 0.8版本export导出数据库接口的参数路径字段为 ds_path,但是0.9.1版本路径字段为 db_path;

      • 导出路径可以是相对路径,相对路径的根目录是gStore的安装目录;

      • 导出路径也可以是绝对路径。

      export接口0.8版本参数

      export接口0.9.1版本参数

      1.9.     drop接口

      • 调用drop接口删除数据库时,参数is_backup传入true代表逻辑删除,传入false代表物理删除(默认为true即逻辑删除)

      • 如果是逻辑删除,将那么会在gStore的根目录下将原来“数据库名称.db”的文件夹变为“数据库名称.bak”文件夹。如果想要还原该数据库,则可以通过修改文件夹名为原来的 “数据库名称.db”,然后调用bin/ginit -db 数据库名的方式其还原。

      1.10.     query接口

      • sparql 检查是否有中文的逗号、中文的空格、可能会导致load数据库失败、从而导致查询失败;

      • sparql主语和谓语的内容中间不能有空格或换行;

      • sparql语句主谓宾语的内容中尽量不要使用特殊字符,尤其是不要包含“<”,“>”特殊符号,可能会导致查询失败;

      • 主语、谓语和宾语之间要加上英文的空格,在一个三元组或者语句结果的地方要加上“.”符号。

      • 使用ghttp的query接口执行insert data 和 delete data语句发起新增三元组和删除三元组,要严格满足三元组的格式要求(即主谓宾语之间要有空格,每一个三元组的结尾以"."结尾,每一个三元组单 独一行),否则可能导致数据错乱,数据插入成功无法查询的情况,最后只能通过重新构建数据库来解 决数据错乱的问题。

        sparql示例:insert data {
        <Alice> <国籍> "美国" .
        }
        delete data {
        <Alice> <国籍> "美国" .

        1.11.  batchInsert和batchRemove接口

        • batchInsert和batchRemove接口都需要传入file参数,该参数可以传入文件的相对路径(示例:./test.nt),相对路径为gStore的安装路径;

        • batchInsert和batchRemove接口也可以传入nt文件的绝对路径;

        • nt文件要严格满足三元组的格式要求(即主谓宾语之间要有空格,每一个三元组的结尾以"."结尾,每一个三元组单独一行);

        nt文件示例:

          <Alice> <关注> <Bob>.
          <Bob> <关注> <Alice>.
          <Carol> <关注> <Bob>.
          <Dave> <关注> <Alice>.
          <Dave> <关注> <Eve>.

          1.12.  gShow接口

          0.8版本gShow接口返回的ResponseBody中会有system数据库,但是0.9.1版本则不返回 system数据库

          1.13.  ipmanage黑白名单接口

          • gStore安装后,默认启用的是黑名单策略

          • 如果想要修改黑白名单策略,则需要进入到gStore的安装根目录,修改“conf.ini”文件

          ip_deny_path为黑名单配置项

          ip_allow_path为白名单配置项

          取消策略只需要在当前行前面最前面加上“#”,修改之后需要重启ghttp服务,否则没有生效

          • 黑白名单不能同时生效,如果同时配置了,gStore会以白名单策略优先

          • 如果都没有配置,系统就表示没有黑白名单策略以下为conf.ini文件的内容
            thread_num=30 
            max_database_num=100
            max_user_num=1000
            root_username="root"
            root_password="123456"
            system_path="data/system/system.nt"
            max_querylog_size=80000000
            querylog_path="logs/endpoint/"
            system_username="system"
            max_output_size=10000000 db_path="."
            backup_path="./backups"
            #白名单
            ip_allow_path=""
            #黑名单
            ip_deny_path="ipDeny.config"
            ip_access_log="logs/iplog/"
            save_log=0 [system]
            version=0.9.1
            licensetype=test
            [gserver]
            default_port=9000
            [backup]
            auto_backup=1
            max_backups=4
            system_path="data/system/system.nt"
            max_querylog_size=80000000
            querylog_path="logs/endpoint/"
            system_username="system"
            max_output_size=10000000
            db_path="."
            backup_path="./backups"

            1.14.  usermanage用户管理接口

            使用usermanage接口新增用户的时候,传入参数op_username尽量不用使用怪异的特殊字符(可以使用的特殊字符“# @ !$&_”),否则会导致所有的用户权限。



            针对gStore有任何问题也可通过加运营同学微信,邀请加入gStore图谱社区咨询。
            诚邀大家参加
            ·gStore-weekly技术文章征集活动·
              相关技术文章,包含但不限于以下内容:系统技术解析、案例分享、实践总结、开发心得、客户案例、使用技巧、学习笔记等。文章要求原创。
              入选周刊即送精美礼品~
            文章转载自图谱学苑,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论