nielspeen/rqlite-laravel-driver

RQLite 的 Laravel 驱动器

1.0 2024-07-01 23:13 UTC

This package is auto-updated.

Last update: 2024-09-30 00:01:33 UTC


README

支持

  • Eloquent 查询
  • 读取一致性:强、弱或无
  • 读取新鲜度 & 严格新鲜度
  • 排队写入
  • 可选直接读取 SQLite 数据库

(尚未)支持

  • 批量写入
  • 批量选择
  • 事务

安装

使用 composer 安装

composer require nielspeen/rqlite-laravel-driver

设置

示例 config/database.php 配置

'connections' => [
        
        'rqlite' => [
            'url' => env('DB_RQLITE_URL', 'rqlite://127.0.0.1:4001/db'),
        ],

        'rqlite2' => [
            'driver' => env('DB_RQLITE_CONNECTION', 'rqlite'),
            'database' => env('DB_RQLITE_DATABASE', 'db'),
            'host' => env('DB_RQLITE_HOST', '127.0.0.1'),
            'port' => env('DB_RQLITE_PORT', '4001'),
            'username' => env('DB_RQLITE_USERNAME', null),
            'password' => env('DB_RQLITE_PASSWORD', null),
        ],

        // ...
   ]

注意,数据库 db 名称将被忽略,因为 RQLite 目前只支持单个数据库。但我仍然建议您指定一个数据库名称,以最大程度地与 Laravel 兼容。

用法

默认情况下,所有查询都使用 强一致性 执行。您可以通过以下方法指定一致性级别。

使用模型特性

use Wanwire\RQLite\PDO\PDO;
use Wanwire\RQLite\WithRQLiteBuilder;

class MyModel extends Model   

{
    use WithRQLiteBuilder;
    protected string $consistency = PDO::RQLITE_CONSISTENCY_STRONG; // or '_WEAK' or '_NONE'

扩展 RQLite 模型

use \Wanwire\RQLite\Models\WeakConsistencyModel;

class MyModel extends WeakConsistencyModel

使用查询构建器

User::noConsistency()->where('admin', 1)->find(1);
User::weakConsistency()->find(323);
User::strongConsistency()->find(747);

PDO

有时您想直接访问 PDO 对象。例如

$pdo = DB::getPdo();

// Set custom PDO attribute
$pdo->setAttribute(Wanwire\RQLite\Pdo\PDO::RQLITE_ATTR_QUEUED_WRITES, true);

// Perform a single query to update both columns
DB::table('users')
    ->where('user_id', 999)
    ->update([
        'bytes_downloaded' => DB::raw("bytes_downloaded + $bytesDownloaded"),
        'bytes_uploaded' => DB::raw("bytes_uploaded + $bytesUploaded"),
    ]);

警告

查询执行后,一致性级别不会被重置。连续的查询将使用相同的一致性级别,除非使用特性、模型或查询构建器设置新的一致性级别。

这种方法确保了预加载使用与查询的主要模型相同的一致性级别。

直接从 SQLite 读取

如果您有高流量的网站,通过 RQLite 的开销可能会很大。通过一些预防措施,您可以通过直接从 SQLite 读取来提高性能。这仅适用于 一致性的查询。

在您的 database.php 中添加一个指向数据库的直接 sqlite 参数

'connections' => [        
        'rqlite' => [
            'driver' => env('DB_RQLITE_CONNECTION', 'rqlite'),
            'database' => env('DB_RQLITE_DATABASE', 'db'),
            'host' => env('DB_RQLITE_HOST', '127.0.0.1'),
            'port' => env('DB_RQLITE_PORT', '4001'),
            'username' => env('DB_RQLITE_USERNAME', null),
            'password' => env('DB_RQLITE_PASSWORD', null),
            'sqlite' => 'sqlite:/var/lib/rqlite/db.sqlite',

        ],
   ]

其次,您需要确保您的 Laravel 应用程序具有只读访问 SQLite 数据库的权限。

不要授予您的 Laravel 应用程序对 SQLite 数据库的写入权限。这将破坏数据库!即使在只读模式下,SQLite 也偶尔会对数据库进行修改,这些修改与 RQLite 不兼容。

致谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅许可文件