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数据库表中的任何内容,表之间相互关联,并且缓存数据的主键通过一定的算法生成,手动修改数据将迎来白屏黑字报错。