结合这个项目有什么好的orm包推荐没有?
Closed this issue · 9 comments
主要考虑到协程的使用吗?可以 hook 一键开启(支持 PDO),推荐 laravel Eloquent ORM,但是要稍微改造一下,ORM 底层的连接应该从协程连接池获取或协程单例
底层协程方式去操作,也有连接池控制这种,类似
底层协程方式去操作,也有连接池控制这种,类似
推荐你熟悉的 ORM + 连接池(https://github.com/open-smf/connection-pool)
如果是现成的,推荐 hyperf 的 orm 组件
`go(function () {
// All MySQL connections: [10, 30]
$pool = new ConnectionPool(
[
'minActive' => 10,
'maxActive' => 30,
'maxWaitTime' => 5,
'maxIdleTime' => 20,
'idleCheckInterval' => 10,
],
new CoroutineMySQLConnector,
[
'host' => '127.0.0.1',
'port' => '3306',
'user' => 'root',
'password' => 'xy123456',
'database' => 'mysql',
'timeout' => 10,
'charset' => 'utf8mb4',
'strict_type' => true,
'fetch_mode' => true,
]
);
echo "Initializing connection pool\n";
$pool->init();
defer(function () use ($pool) {
echo "Closing connection pool\n";
$pool->close();
});
echo "Borrowing the connection from pool\n";
/**@var MySQL $connection */
$connection = $pool->borrow();
$status = $connection->query('SHOW STATUS LIKE "Threads_connected"');
echo "Return the connection to pool as soon as possible\n";
$pool->return($connection);
var_dump($status);
});`
建议去哪里启动这个比较好,$connection这个是全局都能获取到吗?
这个在 Job 类的 handle() 方法使用,handle 方法已经是协程环境,那么可以从外部获取一个 Pool 实例,然后获取连接设置到 ORM,最后用完了再还到 Pool。也可以做的更好,比如改造 ORM 底层,连接直接从 Pool 获取就好。
handle 方法已经是协程环境??是一个进程对应一个协程吗?Job处理时候
外部pool实例哪里搞比较好,协程执行完一次,自动还回pool,或者手动还回,
类似的这种操作,orm,用的多吗?
handle 方法已经是协程环境??是一个进程对应一个协程吗?Job处理时候
外部pool实例哪里搞比较好,协程执行完一次,自动还回pool,或者手动还回,
类似的这种操作,orm,用的多吗?
一个进程多个协程,一个父协程可以有多个子协程。
我说的都是维护 ORM 的连接,怎么维护看情况而定。可以参考 https://github.com/hyperf/database
应该是我没有表达清楚,
我说的意思是实现Job这个类时候,执行时候是使用协程执行,还是进程,或者是进程里面已经创建好一个了协程??因为你说的已经是协程环境,
当然如果是进程可以创建协程,如果是协程也可以创建子协程,
哈哈,看这里:https://github.com/Littlesqx/aint-queue/blob/master/src/Worker/ConsumerWorker.php#L51-L68
执行的时候是使用协程执行,其实严格来说也是进程,毕竟进程是协程的载体。