rrwitp/core

Plasma的核心组件。

v0.3.0 2019-09-28 19:36 UTC

This package is not auto-updated.

Last update: 2024-09-24 07:42:30 UTC


README

Plasma提供异步、非阻塞(数据访问)的数据库抽象层。这是核心组件,定义了公共部分和接口。

核心组件本身不做任何事情,你需要一个Plasma驱动程序,该驱动程序处理所有DBMS的交互。

Plasma的目标不是成为一个完整的数据库抽象层。模拟缺失的功能不是目标,也不应该是。

有关驱动程序的列表,请参阅主仓库

入门指南

选择驱动程序后,可以使用composer进行安装。对于核心组件,命令是

composer require plasma/core

每个驱动程序都有自己的依赖项,因此它们必须实现一个工厂,以正确创建它们的驱动程序实例。有关更多信息,请参阅驱动程序项目页面。

以下是一些伪代码示例

$loop = \React\EventLoop\Factory::create();
$factory = new \SomeGuy\PlasmaDriver\MsSQLFactory($loop);

$client = \Plasma\Client::create($factory, 'root:1234@localhost');

$client->execute('SELECT * FROM `users`', [])
    ->then(function (\Plasma\QueryResultInterface $result) use ($client) {
        // Do something with the query result
        // Most likely for a SELECT query,
        // it will be a streaming query result
        
        $client->close()->done();
    }, function (\Throwable $error) use ($client) {
        // Oh no, an error occurred!
        echo $error.\PHP_EOL;
        
        $client->close()->done();
    });

$loop->run();

游标

游标是一种强大的方式,可以完全控制检索行。游标允许你控制何时从数据库检索行(或多个行),并在检索数百万行时允许应用程序占用很小的内存。

游标返回一个承诺,并在解析为行、行数组或false(没有更多行)时解决。由于它们返回承诺,因此不需要依赖事件,并且在传递结果时可能不需要缓冲行。

当将游标与生成器协程(如Recoil)结合使用时,你将获得一个强大的工具,它已经是PDO中熟悉的内容。

// Inside a coroutine

/** @var \Plasma\CursorInterface  $cursor */
$cursor = yield $client->createReadCursor('SELECT * FROM `my_table`');

while($row = yield $cursor->fetch()) {
    // Process row
}

游标的支持取决于个别驱动程序。

文档

https://plasmaphp.github.io/core/