plasma / core
Plasma 的核心组件。
v0.4.0
2021-02-27 18:01 UTC
Requires
- php: >=7.1
- evenement/evenement: ^3.0|^2.0
- obsidian/validation: ^0.1.0
- react/promise: ^2.7
- react/promise-stream: ^1.1
Requires (Dev)
- ext-json: *
- clue/block-react: ^1.3
- phpunit/phpunit: ^7.0
- react/event-loop: ^1.0
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 }
光标支持取决于个别驱动程序。