plasma/core

Plasma 的核心组件。

v0.4.0 2021-02-27 18:01 UTC

This package is auto-updated.

Last update: 2024-09-09 23:25:14 UTC


README

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

仅核心组件本身并不做任何事情,你需要一个 Plasma 驱动程序,它处理所有 DBMS 的操作。

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

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

入门

一旦你选择了驱动程序,你就可以使用 composer 安装它。对于核心,命令是

composer require plasma/core

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

但是,这里有少量的伪代码

use Plasma\Client;
use Plasma\QueryResultInterface;
use React\EventLoop\Factory;
use SomeGuy\PlasmaDriver\MsSQLFactory;

$loop = Factory::create();
$factory = new MsSQLFactory($loop);

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

$client->execute('SELECT * FROM `users`', [])
    ->then(function (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
use Plasma\CursorInterface;

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

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

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

文档

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