acdh-oeaw/arche-core

ARCHE 仓库后端


README

Latest Stable Version Build status Coverage Status License

ARCHE 仓库解决方案的核心组件,负责 CRUD 操作和事务支持。

安装

composer require acdh-oeaw/arche-core

部署

https://github.com/acdh-oeaw/arche-docker

开发环境

一个允许你在宿主系统中编辑代码并在 docker 容器内运行所有测试的环境。

  • 克隆此仓库并进入它
    git clone https://github.com/acdh-oeaw/arche-core.git
    cd arche-core
  • 获取所有依赖项
    composer update
  • 使用运行时环境构建 docker 镜像
    docker build -t arche-dev build/docker
  • 运行运行时环境,将仓库目录挂载到其中,等待它准备好
    docker run --name arche-dev -v `pwd`:/var/www/html -e USER_UID=`id -u` -e USER_GID=`id -g` -d arche-dev
    docker logs -f arche-dev
    等待直到你看到(时间戳将明显不同)
    2020-06-04 14:06:52,309 INFO success: apache2 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2020-06-04 14:06:52,309 INFO success: postgresql entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2020-06-04 14:06:52,309 INFO success: rabbitmq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2020-06-04 14:06:52,309 INFO success: tika entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    
    然后按 CTRL+c
  • 进入 docker 容器并在其中运行测试
    docker exec -ti -u www-data arche-dev /bin/bash
    然后在容器内部
    XDEBUG_MODE=coverage vendor/bin/phpunit

备注

  • 默认情况下,开发环境以 Apache mod_php 模块的形式运行 PHP,但它也准备以 FPM 运行 PHP。要调整配置,请在宿主系统上运行
    docker exec arche-dev a2dissite mod_php
    docker exec arche-dev a2ensite php_fpm
    docker exec -w /root arche-dev supervisorctl restart apache2
    同样,要返回 mod_php 配置
    docker exec arche-dev a2dissite php_fpm
    docker exec arche-dev a2ensite mod_php
    docker exec -w /root arche-dev supervisorctl restart apache2

REST API 文档

架构

architecture

数据库结构

主表是 resources 表。它存储了所有由其内部仓库 ID(id 列)标识的仓库资源列表以及处理相关数据(列 transaction_idstate)。

元数据根据对其应用的一致性检查分为三个表。

  • identifiers 表存储资源的标识符(仓库假定每个资源可能有多个)。该表强制实施全局标识符的唯一性。存储标识符的 RDF 属性隐式来自仓库的 config.yaml$.schema.id),且不明确存储在数据库中。
  • relations 表存储所有具有 URI 作为对象的 RDF 三元组。它通过外键检查强制实施一个 RDF 三元组指向的仓库资源存在。
  • metadata 表存储所有其他 RDF 三元组。该表不对数据进行约束。三元组以 RDF 类似的方式存储 - 表中的每一行代表一个单一的三元组。
    • 对于看起来像正确数字/日期的三元组值,value_n/value_t 列存储转换为数字/时间戳的值。这允许进行正确的比较,而不会针对字符串值失败。
    • 仅在值的第一个 1000 个字符上设置了 value 列的索引。这既是技术原因也是性能原因。一个重要的后果是,如果你想在值列上受益于索引搜索,你应该将条件声明为 substring(value, 1, 1000) = 'yourValue'

辅助表包括

  • transactions 表存储有关挂起事务的信息。
  • 存储元数据修改历史的 metadata_history 表。它通过在 identifiersrelationsmetadata 表上触发器自动填充。
  • 存储在 full_text_search 表上的 GIST 索引,针对分词后的元数据值和资源的文本内容,允许全文搜索(请参阅Postgresql 文档)。
  • 存储向量空间数据的 spatial_search 表,作为 PostGIS 地理,允许空间搜索(请参阅PostGIS 文档)。
  • raw 表仅用于从之前的 ACDH-CH 存储库解决方案进行数据迁移。

辅助函数和视图

  • metadata_viewidentifiersrelationsmetadata 表中收集三元组。
  • get_relatives() 函数允许轻松找到与给定资源相关联的资源以及给定的 RDF 属性。内部使用递归查询,这可能很难正确编写。
  • get_neighbors_metadata()get_relatives_metadata() 函数允许轻松获取给定资源及其相关资源的元数据三元组。无论是通过任何单跳 RDF 属性(get_neighbors_metadata())还是通过所选的任何数量的元数据属性跳数(get_relatives_metadata())。