scaleplan / data
数据请求包装器
Requires
- php: >=7.2
- scaleplan/cache: dev-master
- scaleplan/db: dev-master
- scaleplan/init-trait: dev-master
- scaleplan/result: dev-master
- scaleplan/sql-templater: dev-master
This package is auto-updated.
Last update: 2024-09-16 20:19:11 UTC
README
DataStory是通过PDO和缓存层访问DBMS的一个抽象。
主要功能是在缓存存储(Redis或Memcached)中透明地缓存查询结果,以及在查询更改时透明地使缓存失效。
安装
composer require scaleplan/data
操作机制
通过标记请求进行缓存消毒:我们清除属于特定标记的一定数量的缓存键,因为标记可以是任何东西,但在DataStory数据库中,我们使用表名作为标记,也就是说,如果某个表被更改,请考虑与此表相关的缓存。
标记子系统选择查询中使用的表名。为此,首先收集所有可以查询的表。这是自动发生的。
当查询DataStory时,确定请求类型:读请求或数据更改请求。数据更改请求分别为INSERT、UPDATE或DELETE,读请求为SELECT查询。
复杂查询,例如,从CTE到PostgreSQL的请求,当一个查询可以同时包含读取和修改操作时,可以通过是否包含至少一个INSERT、UPDATE或DELETE语句来唯一定义。
此外,还有一些使用存储过程的查询,难以预测请求是读取还是修改。对于此类查询,您可以显式更改标志
$dataStory->setIsModifying (true);
因此,如果系统唯一确定请求是读请求,则首先尝试在缓存中找到其结果,缓存键是查询文本和序列化请求参数的哈希值,如果没有查询参数,则仅是查询文本的哈希值。
如果没有查询结果在缓存中,或者结果不相关:请求数据的表在缓存条目保存后已更改,系统将转到数据库,获取结果,将其返回给客户端,并将其保存到缓存中。然而,虽然缓存保存是同步模式,但未来计划将其异步化。
如果请求是更改的,则执行该请求,然后将查询表保存为缓存条目,其键是表名,值是表更改时间。
使用模块
我们有一个书籍表(books)
| | id | title | ISBN | description | | | --- | --- | --- | --- | | | 1 | PHP Web Services | 9781449356569 | | | | | 2 | Architect's Pocket Php Reference | 0973862130 | | | | | 3 | Php String Handling Handbook | 186100835X | Book DescriptionThis book will cover all the most important tasks related to dealing with text/strings in PHP ... |
和请求
$query = 'SELECT * FROM books WHERE id =: id';
如果您执行以下代码
$dataStory = DataStory :: create ($query, ['id' => 3]);
$dataStory-> getValue ($prefix)
则不会向缓存中添加任何内容 - DataStory将下降到数据库,返回结果并将其保存到缓存,但后续请求从此和其他客户端将从缓存返回结果。
如果您然后运行
$query = 'UPDATE books SET id = 4 WHERE id =: id';
$dataStory = DataStory :: create ($query, ['id' => 2]);
$dataStory-> getValue ($prefix)
则 books 表的缓存被重置,下一次从 books 表读取请求将遵循数据库中的数据。
此外,该系统还包含保存HTML页面和操作它们的函数。
$dataStory-> getHtml ($verifyingFilePath = '');
$dataStory-> setHtml ($html, $tags = []);
$dataStory-> deleteHtml();
保存页面的布局可以忽略,遵循与查询结果相同的规则,即需要将页面链接到加载信息的数据库表(setHtml
方法的$tags
参数)。此外,对于残疾用户,您可以检查页面模板文件本身(可能是一个HTML文件)的更改,并在模板更改时重置页面缓存。