我借鉴了 PHP PDO 对象预处理的方式,带来的思路,设计并开发一个组件

在 KK 集团工作期间开发过一个组件,至于为啥要开发这个组件,每家公司业务不一样,当时是用于从 Elasticsearch 和 ClickHouse 两个数据源里面查询数据,代码实现并不复杂,我自豪的是设计思路,分享一下。

因为我看过也用过 PDO 的预处理,所以借鉴了其预处理思路,文档地址 https://www.php.net/manual/zh/pdo.prepare.php。

PDO 的好处是,SQL 语句只解析一次,可以对参数绑定一次或者多次执行,提高了性能,还可以防止 SQL 注入。

es 6.7 版本之后支持原生 SQL 语句查询,不需要写复杂的 DSL ,文档地址 https://www.elastic.co/guide/en/elasticsearch/reference/6.7/xpack-sql.html。

设计思路,代码先定义一个接口类,然后两个 es 类和 clickhouse 类去实现接口定义好的方法,面向对象编程接口就是起到约束作用。

再加上静态工厂设计模式,实现解耦,方便后续扩展。

组件有提供 api 接口,参数如下

{
    "sql": "select :name from :table where :id=:id_value",
    ":name": "name",
    ":table": "users",
    ":id": "id",
    ":id_value": "1"
    "type":"es"
}

代码拿到 json 参数之后,先校验,再做一下字符串匹配,替换就可以得到一条完整是 SQL 语句。

设计代码满足业务,也要实现功能,需要平时多学习,这样遇到问题才有更多思路,选择最好的。

打赏作者

您将是第一位评论人!

提醒
avatar