Drupal8目前使用mysql最为广泛,目前不支持Oracle,因此也无法享受Oracle带来的其他功能,但mysql本身功能已经够强大了。这里需要说明,Drupal8的数据库不是业务数据库,而是Drupal8框架严格依赖的代码的一部分,数据库中保存了文章、评论、路由器、模块、缓存等大量信息。说明一下数据库最关键的几个表:

    数据库表 描述
    user* 用户表:注册用户以及权限配置都保存在user相关的表中,密码是存储,一般不能直接改密码
    router 路由表:路由表是通过扫描代码生成的,一般模块定义时会有routing文件
    shortcut 快捷方式:存储控制台的快捷方式
    taxonomy* 分类:控制台中,可以增加系统分类、域分类等。简单说,在界面上通过分类展示。但需要更高级的功能开发。
    url_alias 别名表:如其名,是URL的别名映射
    node* 节点:门户网站最基本的概念是节点
    menu* 菜单:门户网站菜单定义,页眉页脚的菜单在这里可配置
    media* 媒体:媒体定义,目前没有用到
    locales* 国际化:解析语言,没有用到
    field* 字段定义:未用到,文章属性的默认配置
    comment* 评论功能:未开启,目前不需要这个
    file* 静态文件:关键项,文件存储依赖这个。门户网站不能随意迁移,因为上传的文件会基于时间进行区分,如果时间不一致会导致文件找不到。一般内网图片为空,就是这个原因导致的。
    block* 区块:很关键,页面布局的基本元素是区块。多个区块共同构成一个界面。
    cache* 缓存:Drupal8核心功能。很多生产事故都是缓存污染、缓存锁表造成的。
    semaphore 原子表:Drupal8耗时操作原子锁,保证同一时间只能有一个耗时操作。

    关于数据库,仅说明几个关键点:
    cache*:cache开头的系列表,是drupal8集成的缓存bins功能表,所有的缓存数据都会存储在bins中,比方说twig文件渲染后,会存储在cache_render渲染表中,而动态页面加载完成会缓存在cache_dynamic_page_cache表中。每个缓存数据都有留下标记存储在cachetags表中,一般该表如果被清空,数据库数据将不会被清理。一般默认将缓存存储在后台数据库中,可以通过全局变量$settings[‘cache’][‘bins’][‘render’]指定其他的处理方式,比如存储在redis中。

    router:路由表。从代码中收集了所有的路由定义生成的表,该表支持正则或者模糊匹配。Drupal8在寻址的时候,会通过该表来确定请求是否合法。

    semaphore:原子锁表。该表利用了数据库的事务功能,一次只能有一个插入操作能够正常执行,从而控制高并发的原子操作。这个表对数据库多活有局限性,同时也是数据库迁移过程中,容易造成应用异常的原因之一。有时候锁表,指的不仅仅是mysql自身的锁表,semaphore状态异常某种程度上也是一种死锁现象

    不能手动更改mysql数据库表中的任何内容,表之间相互关联,并且缓存数据的主键通过一定的算法生成,手动修改数据将迎来白屏黑字报错