https://github.com/cloudtay/ripple-database
High-performance database connection pool, perfectly compatible with PDO interface, built-in connection pool
https://github.com/cloudtay/ripple-database
Last synced: 9 months ago
JSON representation
High-performance database connection pool, perfectly compatible with PDO interface, built-in connection pool
- Host: GitHub
- URL: https://github.com/cloudtay/ripple-database
- Owner: cloudtay
- License: mit
- Created: 2025-09-27T04:15:03.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-09-28T07:14:42.000Z (9 months ago)
- Last Synced: 2025-09-28T09:14:13.245Z (9 months ago)
- Language: PHP
- Size: 56.6 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Ripple DB
⚡️ 高性能数据库连接池, 完美兼容PDO接口, 内置连接池
| 驱动类型 | 支持 |
|---------|-----|
| `MySQL` | 已支持 |
| `...` | 暂无 |
## 一键安装
```bash
composer require cloudtay/ripple-database
```
### 快速开始
```php
exec("CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE
)");
// 预处理语句
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(['Alice', 'alice@example.com']);
// 查询数据
$result = $pdo->query("SELECT * FROM users WHERE name = 'Alice'")->fetch();
echo "User: {$result['name']} - {$result['email']}\n";
```
#### 连接选项
| 配置项 | 类型 | 默认值 | 描述 |
|---------------------------|-----|-------|-----------|
| ... | ... | | PDO默认选项类表 |
| `pool_max` | 整数 | `20` | 最大连接数 |
| `pool_min` | 整数 | `5` | 最小连接数 |
| `pool_connection_timeout` | 整数 | `300` | 连接超时时间(秒) |
```php
$pool = new PDOPool($dsn, $user, $password, [
// PDO选项
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
// 连接池选项
'pool_max' => 20, // 最大连接数,自动扩容
'pool_min' => 5, // 最小连接数,初始化时自动连接
'pool_connection_timeout' => 300, // 连接超时时间(惰性检查)
]);
```
## 兼容性
### 已兼容的PDO方法
| 方法名 | 描述 | 支持状态 |
|------------------------------|--------------|-------|
| `PDO::prepare()` | 预处理语句 | 支持 |
| `PDO::query()` | 执行查询 | 支持 |
| `PDO::exec()` | 执行语句并返回受影响行数 | 支持 |
| `PDO::lastInsertId()` | 获取最后插入 ID | 支持 |
| `PDO::beginTransaction()` | 开始事务 | 支持 |
| `PDO::commit()` | 提交事务 | 支持 |
| `PDO::rollBack()` | 回滚事务 | 支持 |
| `PDO::inTransaction()` | 检查是否在事务中 | 支持 |
| `PDO::setAttribute()` | 设置PDO属性 | 支持 |
| `PDO::getAttribute()` | 获取PDO属性 | 支持 |
| `PDO::errorCode()` | 获取错误代码 | 支持 |
| `PDO::errorInfo()` | 获取错误信息 | 支持 |
| `PDO::getAvailableDrivers()` | 获取可用驱动列表 | 支持 |
| `PDO::status()` | 获取连接池状态信息 | 连接池独有 |
| `PDO::close()` | 关闭连接池 | 连接池独有 |
| `PDO::quote()` | 引号转义 | 不支持 |
### 类型兼容性
与原生PDO在数据类型处理上完全一致, 确保数据存储和检索的准确性。
| 数据类型 | MySQL 类型 | 强等于校验 |
|---------|-------------------------------------------------|-------|
| 整数类型 | `TINYINT`, `SMALLINT`, `INT`, `BIGINT` | 通过 |
| 浮点类型 | `FLOAT`, `DOUBLE`, `DECIMAL` | 通过 |
| 字符串类型 | `CHAR`, `VARCHAR`, `TEXT` | 通过 |
| 二进制类型 | `BLOB` | 通过 |
| JSON 类型 | `JSON` | 通过 |
| 日期时间 | `DATE`, `DATETIME`, `TIMESTAMP`, `TIME`, `YEAR` | 通过 |
| 布尔类型 | `BOOLEAN` | 通过 |
| 枚举类型 | `ENUM`, `SET` | 通过 |
项目包含完整的类型兼容性测试, 确保与原生PDO的行为完全一致:
```php
// 测试覆盖的数据类型
$testData = [
'tiny_col' => 1, // TINYINT
'small_col' => 32000, // SMALLINT
'int_col' => 2147483647, // INT
'big_col' => 9223372036854775807, // BIGINT
'float_col' => 3.14159, // FLOAT
'double_col' => 2.718281828459, // DOUBLE
'decimal_col' => '12345.67', // DECIMAL
'char_col' => 'char_text', // CHAR
'varchar_col' => 'varchar_text', // VARCHAR
'text_col' => 'this is text', // TEXT
'blob_col' => random_bytes(16), // BLOB
'json_col' => json_encode(['a' => 1, 'b' => 2]), // JSON
'date_col' => '2025-09-20', // DATE
'datetime_col' => '2025-09-20 19:00:00', // DATETIME
'timestamp_col' => '2025-09-20 19:00:00', // TIMESTAMP
'time_col' => '12:34:56', // TIME
'year_col' => 2025, // YEAR
'bool_col' => 1, // BOOLEAN
'enum_col' => 'b', // ENUM
'set_col' => 'x,y', // SET
'emoji_col' => '😀🚀✨' // UTF-8 Emoji
];
```
## 用法示例
### 连接池使用
```php
10,
'pool_min' => 2
]);
$channel = new Channel(10);
for ($i = 0; $i < 10; $i++) {
go(static function () use ($pdo, $channel) {
$result = $pdo->query("SELECT SLEEP(1);");
$channel->send($result);
});
}
while ($result = $channel->receive()) {
echo json_encode($result->fetch(), JSON_UNESCAPED_UNICODE) . PHP_EOL;
}
```
### 事务处理
```php
beginTransaction();
$stmt1 = $pdo->prepare("UPDATE accounts SET balance = balance - ? WHERE name = ?");
$stmt1->execute([100.00, 'Alice']);
$stmt2 = $pdo->prepare("UPDATE accounts SET balance = balance + ? WHERE name = ?");
$stmt2->execute([100.00, 'Bob']);
$pdo->commit();
echo "Transaction completed successfully\n";
} catch (Exception $e) {
$pdo->rollback();
echo "Transaction failed: " . $e->getMessage() . "\n";
}
```
## 许可证
MIT License
## 作者
cclilshy