Littlesqx/aint-queue

结合这个项目有什么好的orm包推荐没有?

Closed this issue · 9 comments

结合这个项目有什么好的orm包推荐没有?

主要考虑到协程的使用吗?可以 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

执行的时候是使用协程执行,其实严格来说也是进程,毕竟进程是协程的载体。