定制 ytake/laravel-couchbase 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

ytake/laravel-couchbase

Composer 安装命令:

composer require ytake/laravel-couchbase

包简介

Couchbase providers for Laravel

README 文档

README

for Laravel 5.1.*(higher)

cache, session, database, queue extension package required ext-couchbase

Build Status Code Coverage Scrutinizer Code Quality StyleCI

Packagist Packagist Packagist Codacy Badge

SensioLabsInsight

Notice

Supported Auto-Discovery, Design Document, Cache Lock (Laravel5.5)

Laravel version Laravel-Couchbase version ext-couchbase
Laravel 5.6 ^1.1 >=2.3.2
Laravel 5.5 ^1.0 >=2.3.2
Laravel 5.4 ^0.7 ^2.2.2
Laravel 5.3 ^0.6 ^2.2.2
Laravel 5.2 ^0.5 ^2.2.2
Laravel 5.1 ^0.4 ^2.2.2

Deprecated

not recommended couchbase-memcached driver couchbase session driver

install

$ composer require ytake/laravel-couchbase

or your config/app.php

'providers' => [
    // added service provider
    \Ytake\LaravelCouchbase\CouchbaseServiceProvider::class,
    \Ytake\LaravelCouchbase\ConsoleServiceProvider::class,
]

usage

database extension

add database driver(config/database.php)

'couchbase' => [
    'driver' => 'couchbase',
    'host' => 'couchbase://127.0.0.1',
    'user' => 'userName', // optional administrator
    'password' => 'password', // optional administrator
    // optional configuration / management operations against a bucket.
    'administrator' => [
        'user'     => 'Administrator',
        'password' => 'password',
    ],
],

case cluster

'couchbase' => [
    'driver' => 'couchbase',
    'host' => 'couchbase://127.0.0.1,192.168.1.2',
    'user' => 'userName', // optional administrator
    'password' => 'password', // optional administrator
],

choose bucket table() method or

basic usage bucket() method

N1QL supported(upsert enabled)

see http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/index.html

SELECT

// service container access
$this->app['db']->connection('couchbase')
    ->table('testing')->where('whereKey', 'value')->first();

// use DB facades
\DB::connection('couchbase')
    ->table('testing')->where('whereKey', 'value')->get();

INSERT / UPSERT

$value = [
    'click' => 'to edit',
    'content' => 'testing'
];
$key = 'insert:and:delete';

$result = \DB::connection('couchbase')
    ->table('testing')->key($key)->insert($value);

\DB::connection('couchbase')
    ->table('testing')->key($key)->upsert([
        'click'   => 'to edit',
        'content' => 'testing for upsert',
    ]);

DELETE / UPDATE

\DB::connection('couchbase')
    ->table('testing')->key($key)->where('clicking', 'to edit')->delete();

\DB::connection('couchbase')
    ->table('testing')->key($key)
    ->where('click', 'to edit')->update(
        ['click' => 'testing edit']
    );
execute queries

example)

"delete from testing USE KEYS "delete" RETURNING *"
"update testing USE KEYS "insert" set click = ? where click = ? RETURNING *"

returning

default *

\DB::connection('couchbase')
    ->table('testing')
    ->where('id', 1)
    ->offset($from)->limit($perPage)
    ->orderBy('created_at', $sort)
    ->returning(['id', 'name'])->get();

View Query

$view = \DB::view("testing");
$result = $view->execute($view->from("dev_testing", "testing"));

cache extension

for bucket type couchbase

config/cache.php

'couchbase' => [
   'driver' => 'couchbase',
   'bucket' => 'session'
],

for bucket type memcached

'couchbase-memcached' => [
    'driver'  => 'couchbase-memcached',
    'servers' => [
        [
            'host' => '127.0.0.1',
            'port' => 11255,
            'weight' => 100,
            'bucket' => 'memcached-bucket-name',
            'option' => [
                // curl option
            ],
        ],
    ],
],

not supported

couchbase bucket, use bucket password

config/cache.php

'couchbase' => [
   'driver' => 'couchbase',
   'bucket' => 'session',
   'bucket_password' => 'your bucket password'
],

session extension

.env etc..

specify couchbase driver

consistency

default :CouchbaseN1qlQuery::NOT_BOUNDED

$this->app['db']->connection('couchbase')
    ->consistency(\CouchbaseN1qlQuery::REQUEST_PLUS)
    ->table('testing')
    ->where('id', 1)
    ->returning(['id', 'name'])->get();

callable consistency

$this->app['db']->connection('couchbase')
    ->callableConsistency(\CouchbaseN1qlQuery::REQUEST_PLUS, function ($con) {
        return $con->table('testing')->where('id', 1)->returning(['id', 'name'])->get();           
    });

Event

for N1QL

events description
\Ytake\LaravelCouchbase\Events\QueryPrepared get n1ql query
\Ytake\LaravelCouchbase\Events\ResultReturning get all property from returned result
\Ytake\LaravelCouchbase\Events\ViewQuerying for view query (request uri)

Schema / Migrations

The database driver also has (limited) schema builder support.
easily manipulate indexes(primary and secondary)

use Ytake\LaravelCouchbase\Schema\Blueprint as CouchbaseBlueprint;

\Schema::create('samples', function (CouchbaseBlueprint $table) {
    $table->primaryIndex(); // primary index
    $table->index(['message', 'identifier'], 'sample_secondary_index'); // secondary index
    // dropped
    $table->dropIndex('sample_secondary_index'); 
    $table->dropPrimary();
});

Supported operations:

  • create and drop
  • index and dropIndex (primary index and secondary index)

Artisan

for couchbase manipulate indexes

commands description
couchbase:create-index Create a secondary index for the current bucket.
couchbase:create-primary-index Create a primary N1QL index for the current bucket.
couchbase:drop-index Drop the given secondary index associated with the current bucket.
couchbase:drop-primary-index Drop the given primary index associated with the current bucket.
couchbase:indexes List all N1QL indexes that are registered for the current bucket.
couchbase:create-queue-index Create primary index, secondary indexes for the queue jobs couchbase bucket.
couchbase:create-design Inserts design document and fails if it is exist already. for MapReduce views

-h more information.

create design

config/couchbase.php

return [
    'design' => [
        'Your Design Document Name' => [
            'views' => [
                'Your View Name' => [
                    'map' => file_get_contents(__DIR__ . '/../resources/sample.ddoc'),
                ],
            ],
        ],
    ]
];

Queue

Change the the driver in config/queue.php:

    'connections' => [
        'couchbase' => [
            'driver' => 'couchbase',
            'bucket' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
        ],
    ],

example

php artisan queue:work couchbase --queue=send_email

hacking

To run tests there are should be following buckets created on local Couchbase cluster:

$cluster = new CouchbaseCluster('couchbase://127.0.0.1');
$clusterManager = $cluster->manager('Administrator', 'password');
$clusterManager->createBucket('testing', ['bucketType' => 'couchbase', 'saslPassword' => '', 'flushEnabled' => true]);
$clusterManager->createBucket('memcache-couch', ['bucketType' => 'memcached', 'saslPassword' => '', 'flushEnabled' => true]);
sleep(5);
$bucketManager = $cluster->openBucket('testing')->manager();
$bucketManager->createN1qlPrimaryIndex();

Also tests are expecting regular Memcached daemon listening on port 11255.

soon

  • authintication driver
  • Eloquent support

Couchbase Document

REST API / Creating and Editing Buckets
couchbase-cli / user-manage
Authentication
Authorization API

ytake/laravel-couchbase 适用场景与选型建议

ytake/laravel-couchbase 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 52.34k 次下载、GitHub Stars 达 30, 最近一次更新时间为 2015 年 11 月 01 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「database」 「queue」 「cache」 「session」 「laravel」 「couchbase」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 ytake/laravel-couchbase 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 ytake/laravel-couchbase 我们能提供哪些服务?
定制开发 / 二次开发

基于 ytake/laravel-couchbase 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 52.34k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 30
  • 点击次数: 23
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 30
  • Watchers: 3
  • Forks: 21
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2015-11-01