pixelfederation / vitess-php-pdo
适用于 Vitess PHP 客户端的 PHP PDO 兼容驱动程序。
Requires
- php: >=5.6
- doctrine/collections: ^1.3
- greenlion/php-sql-parser: v4.1.1
- vitess/php-client: v2.1.0
Requires (Dev)
- phpmd/phpmd: @stable
- phpunit/php-code-coverage: ^4
- phpunit/phpunit: ^5.1
- squizlabs/php_codesniffer: 2.*
- symfony/var-dumper: ^3.0
README
此库提供了一个用于 Vitess 的 PDO 驱动程序。它不是 PDO PHP 扩展的驱动程序,而是一个纯 PHP 实现的 PDO 接口。如果没有在应用程序代码中检查 instanceof \PDO,则它可以与原始 PDO 类互换。
当前状态
目前代码处于测试版质量,并非所有 PDO 方法和类都已实现,但它已在我们的应用程序中进行了测试并且运行正常。欢迎每个人提交 pull request 来实现一些缺失的功能。
此外,单元测试目前绑定到我们的 Vitess 开发实例,有计划进行更改。文档还很少,但由于有人请求驱动程序,所以我们决定开源。
此驱动程序与任何官方 MySql/MariaDB 管理工具都不兼容,但我们创建了一个 Adminer 分支,您可以使用它来了解您的 Vitess 集群中的数据。
使用方法
用于 PDO 实现的 Vitess PHP 客户端依赖于 PHP GRPC 扩展,该扩展必须与 GRPC 和 Protobuf 一起安装。
要安装 composer 软件包,请运行以下命令
composer require pixelfederation/vitess-php-pdo
在安装依赖项后,PDO 类应按以下方式实例化
$pdo = new \VitessPdo\PDO("keyspace={$keyspace};host={$host};port={$port}");
- $keyspace: Vitess keyspace(数据库名称的替代品)
- $host: Vtgate 的 IP 或主机名
- $port: Vtgate 端口
如果您想使用有限的 DDL 支持,则必须按以下方式实例化 PDO 实例
$pdo = new \VitessPdo\PDO("vitess:cell={$cell};keyspace={$keyspace};host={$host};port={$port};vtctld_host={vtcrld_host};vtctld_port={vtctld_port}");
- $cell: Vitess 单元的名称
- $vtctld_host: Vtctld 的 IP 或主机名
- $vtctld_port: Vtctld 端口
仅支持有限的 DDL 查询子集(实现的目标是使 PDO 驱动程序与 Adminer 兼容)。
贡献
如果您想贡献,我们强烈建议从项目目录运行以下命令
./bin/setup-dev
这将设置一个提交钩子,它使用 PHPCS 检查 PSR/2 编码标准,并运行 PHP linter 和 PHP Mess Detector PHPMD
要能够运行单元测试,您现在需要在本地上安装 Vitess(有针对 Ubuntu 和 OS X 的指南)。
测试需要从设置好所有环境变量的 shell 中运行,以准备好运行 Vitess 实例。设置环境变量后,只需转到库根目录并运行以下命令
./bin/phpunit
如果需要在新建的单元测试中执行任何SQL查询,tests/vitess/schema文件夹提供了一个数据库模式。该模式包含两个分片 - lookup 和 user。
已知问题
在OS X上,当前GRPC版本(0.13)和PHP GRPC扩展(0.8)(这两个版本对PDO驱动和Vitess都是强制性的)存在“有时”问题,意味着对Vitess的GRPC请求会稍微慢一点,原因未知。Linux不受影响。
此外,目前还没有PHP 7 GRPC扩展。
这两个问题已在grpc 1.0.0RC1和1.0.0RC2中得到解决,该扩展现在应该稳定了。