couchbase_Couchbase Mobile:NoSQL在边缘上的力量

couchbase

在理想的环境中,我们始终在移动设备上建立快速,可靠的网络连接。 不幸的是,无论您是开车穿越茫茫荒野,还是被成千上万的其他人围着电话使用,甚至是在应该作为数据存放地点的区域,都不可避免地会遇到连接问题。 幸运的是,可以通过在本地存储数据来减轻此类问题。

输入: 嵌入式数据库

如果您不熟悉移动和物联网(或者像现在孩子们所说的那样,边缘)数据库环境,您可能会直接前往您最喜欢的搜索引擎来研究选项。

剧透警报...有很多。

不幸的是,尽管有很多选择供您选择,但是像技术中的许多其他主题一样,没有灵丹妙药可以治愈您的所有“边缘性疾病”。 但是,还有其他解决方案脱颖而出。 其中之一就是Couchbase

边缘上的Couchbase

Couchbase,Inc .的核心是提供分布式NoSQL数据库的公司,该数据库可以在本地,本地或所有主要云提供商中托管。 好的,很好,但这与移动和物联网有什么关系?

Couchbase Mobile通过以下三个主要方面提供了安全地管理和同步从任何云/服务器到每个移动设备的数据的能力,从而将Couchbase扩展到了光荣的边缘

  1. Couchbase Lite ,一个用于移动应用程序的嵌入式NoSQL JSON文档样式数据库
  2. Sync Gateway ,一种面向Internet的同步机制,可在移动客户端和服务器之间安全地同步数据,以及
  3. Couchbase Server ,一个高度可扩展的分布式NoSQL数据库平台。

Couchbase Lite

如前所述,Couchbase Lite是一个嵌入式轻量级, 面向NoSQL,面向文档 ,可同步的数据库引擎。 关系数据库由充满信息行的表的集合组成,而文档数据库将数据存储在JSON Blob中,如下所示:

{"name" : "Rob" ,
  "age" : 34 ,
  "type" : "person"
}
  • 有趣的事实 :Couchbase Lite实际上使用了效率更高的二进制编码解决方案,称为 Fleece

将信息存储在文档中可提供灵活性和可伸缩性优势 ,在移动和物联网应用程序中使用时特别有用。

那是Couchbase Lite的要旨,但您可能想知道,牛肉在哪里? Couchbase Lite支持什么,如何使用? Couchbase Lite在iOS Android Xamarin IoT上受支持 应用程序,并提供了各种易于实现的功能,这些功能使创建具有真正弹性的应用程序变得轻而易举。 因此,让我们开始吧!

基本的CRUD操作

Couchbase Lite支持您希望数据库解决方案提供的所有CRUD操作。 以下是创建和保存广告的简单示例 MutableDocument

迅捷(iOS)

let doc = MutableDocument ()
    .setString( "person" , forKey: "type" )
    .setString( "Rob" , forKey: "name" )
    .setInt( 34 , forKey: "age" )
try database.saveDocument(doc)

Java(Android)

MutableDocument doc =new MutableDocument();
newTask.setString( "type" , "person" );
newTask.setString( "name" , "Rob" );
newTask.setInt( "age" , 34 );
try {
    database.save(doc);
} catch (CouchbaseLiteException e) {
    Log.e(TAG, e.toString());
}

C#(Xamarin)

using ( var doc = new MutableDocument( "person::1" )) 
{
    doc.SetString( "type" , "person" );
    doc.SetString( "name" , "Rob" );
    doc.SetInt( "age" , 34 );

    db.Save(doc);
}

查询方式

Couchbase Lite查询已发生重大变化。 它们现在不再基于1.x中使用的map / reduce视图,而是基于表达式,形式为“从____排序的文档中返回____,按____排序”,其语义基于Couchbase的N1QL查询语言

指定查询包含以下几部分:

  • SELECT-指定投影,这是要返回的文档部分。
  • FROM-指定要从中查询文档的数据库。
  • JOIN-指定要在其中加入多个文档的匹配条件。
  • WHERE-指定结果必须满足的查询条件。
  • GROUP BY-指定用于将行分组的查询条件。
  • ORDER BY-指定查询条件以对结果中的行进行排序

下面是一个简单的查询,用于从Couchbase Lite数据库中检索所有“个人”文档。

迅捷(iOS)

let query = QueryBuilder
    .select( SelectResult .all())
    .from( DataSource .database(database))
    . where ( Expression .property( "type" ).equalTo( Expression .string( "person" ))))

Java(Android)

Query query = QueryBuilder
    .select(SelectResult.all())
    .from(DataSource.database(database))
    .where(Expression.property("type" ).equalTo(Expression.string( "person" ))));

C#(Xamarin)

var query = QueryBuilder.Select(SelectResult.All())
    .From(DataSource.Database(db))
    .Where(Expression.Property( "type" ).EqualTo(Expression.String( "person" ))));
  • 提示:使用名为Couchbase.Lite.Mapping的扩展Nuget包,使用基于Xamarin的应用程序执行查询操作甚至更加容易!

在Couchbase Mobile上进行查询的下一步围绕实时查询展开 。 实时查询保持活动状态,并监视数据库中的更改。 实时查询是一种构建React式用户界面(尤其是表/列表视图)的最新方法,以使用户界面保持最新。

只需在查询中添加侦听器,您就可以接收Couchbase Lite数据库的实时更新。

迅捷(iOS)

let token = query.addChangeListener { (change) in
for result in change.results! {
    print (result.keys)
}

Java(Android)

ListenerToken token = query.addChangeListener(change -> {for (Result result: change.getResults()) {
        Log.d(TAG, "results: " + result.getKeys());
    }
});

C#(Xamarin)

var token = query.AddChangeListener((sender, args) =>
{
    var allResult = args.Results.AllResults();
    foreach ( var result in allResult) {
        Console.WriteLine(result.Keys);
    }
});

全文搜索

全文搜索(FTS)使您可以创建,管理和查询在Couchbase Lite数据库中的文档上定义的专用索引 。 FTS提供了广泛的自然语言查询功能。

创建FTS 指数:

迅捷(iOS)

do {
    let index = IndexBuilder .fullTextIndex(items: FullTextIndexItem .property( "name" )).ignoreAccents( false )
    try database.createIndex(index, withName: "nameFTSIndex" )
} catch let error {
    print (error.localizedDescription)
}

Java(Android)

database.createIndex("nameFTSIndex" ,
    IndexBuilder.fullTextIndex(FullTextIndexItem.property( "name" )).ignoreAccents( false ));

C#(Xamarin)

var index = IndexBuilder.FullTextIndex(FullTextIndexItem.Property( "name" )).IgnoreAccents( false );
db.CreateIndex( "nameFTSIndex" , index);

创建FTS 查询:

创建索引后,就可以构造和执行对要索引的属性的FTS查询。 FTS标准定义为FullTextExpression。 左侧是要使用的全文本索引,右侧是要匹配的模式。

迅捷(iOS)

let whereClause = FullTextExpression .index( "nameFTSIndex" ).match( "'buy'" )
let query = QueryBuilder
    .select( SelectResult .expression( Meta .id))
    .from( DataSource .database(database))
    . where (whereClause)

do {
    for result in try query.execute() {
        print ( "document id \(result.string(at: 0)!)" )
    }
} catch let error {
    print (error.localizedDescription)
}

Java(Android)

Expression whereClause = FullTextExpression.index("nameFTSIndex" ).match( "buy" );
Query ftsQuery = QueryBuilder.select(SelectResult.expression(Meta.id))
    .from(DataSource.database(database))
    .where(whereClause);
ResultSet ftsQueryResult = ftsQuery.execute();
for (Result result : ftsQueryResult) {
    Log.i(
        TAG,
        String.format( "document properties %s" , result.getString( 0 )));
}

C#(Xamarin)

var whereClause = FullTextExpression.Index( "nameFTSIndex" ).Match( "'buy'" );
using ( var query = QueryBuilder.Select(SelectResult.Expression(Meta.ID))
    .From(DataSource.Database(db))
    .Where(whereClause)) {
    foreach ( var result in query.Execute()) {
        Console.WriteLine( $"Document id {result.GetString( 0 )} " );
    }
}

预测查询

预测查询通过提供可以通过经过训练的机器学习模型处理文档数据(属性或Blob)的查询功能,使Couchbase Lite查询能够使用机器学习。

考虑一个图像分类器模型,该模型将图片作为输入并输出标签和概率。

Couchbase Lite预测查询使您可以集成ML模型,并运行预测查询。 有关更多信息和示例,请查看iOSAndroidXamarin的最新文档。

对等复制

点对点同步使运行Couchbase Lite的设备可以直接彼此同步数据。 作为此过程的一部分,Couchbase Lite负责存储数据并跟踪数据交换,但不负责数据传输本身。

注意:发送和接收数据必须由平台API或第三方框架处理。

同步网关

Sync Gateway是可水平扩展的Web服务器,可安全管理Couchbase Lite和Couchbase Server之间的访问控制和数据同步。

对于大多数移动开发人员而言,创建同步解决方案可能会很痛苦,这不足为奇。 毕竟,创建可以处理诸如以下内容的东西有很多:

  • 可以由多个用户同时更新或删除的文档的冲突解决功能。
  • 灵活的配置以适应不断变化的需求
  • 通过身份验证和授权来调节/控制对数据的访问。
  • 限制在嵌入式数据库实例之间复制不必要数据的数量。

幸运的是,Sync Gateway涵盖了所有这些以及更多内容!

解决冲突

从Couchbase Lite 2.0(2018年发布)开始,冲突会自动解决 。 说真的 自动

组态

配置文件确定Sync Gateway可以与之交互的运行时行为,包括服务器配置和数据库或一组数据库。

配置文件可以随您需要而简单或复杂。下面是Sync Gateway配置文件的简单示例。

{"logging" : {
    "console" : {
     "log_level" : "debug" ,
     "log_keys" : [ "*" ],
     "color_enabled" : false
   }
  },
  "databases" : {
    "couchdraw" : {
      "server" : "http://localhost:8091" ,
      "bucket" : "couchdraw" ,
      "username" : "couchdraw_user" ,
      "password" : "password" ,
      "num_index_replicas" : 0 ,
      "enable_shared_bucket_access" : true ,
      "import_docs" : "continuous" ,
      "users" : { "GUEST" : { "disabled" : false , "admin_channels" : [ "*" ] } },
      "allow_conflicts" : false ,
      "revs_limit" : 20
    }
  }
}

要了解有关Sync Gateway配置文件的更多信息,请在此处查看完整的文档!

访问控制

Sync Gateway支持多种身份验证途径。

  • 基本身份验证 :提供用户名和密码以对用户进行身份验证。
  • 身份验证提供者 :同步网关提供了一个完整的解决方案,可以通过Facebook或Google进行身份验证。 对于其他提供商,我们建议使用自定义身份验证或OpenID Connect。
  • 自定义身份验证 :使用App Server自己处理身份验证,并在Sync Gateway Admin REST API上创建用户会话。
  • OpenID Connect身份验证 :使用OpenID Connect提供程序(Google +,Paypal等)对用户进行身份验证。 静态提供程序:Sync Gateway当前支持Facebook,Google +和OpenID Connect提供程序的身份验证终结点

数据路由

Sync Gateway使用通道使在大量用户之间共享数据库变得容易,并控制对数据库的访问。 渠道是文档和用户之间的中介。 数据库中的每个文档都属于一组通道,并且每个用户都可以访问一组通道。 您可以使用渠道来:

  • 对数据集进行分区。
  • 授权用户访问文档。
  • 最小化同步到设备的数据量

Couchbase服务器

Couchbase Server是一个开放源代码的分布式NoSQL面向文档的参与数据库。 它专门为交互式Web,移动和IoT应用程序提供低延迟数据管理。

尽管不是严格要求,但通过Sync Gateway的Couchbase Lite可以与Couchbase Server无缝集成,以在边缘上提供完整的端到端解决方案。

学到更多

如果您想了解有关如何在移动或物联网应用程序中使用Couchbase Mobile的更多信息,请考虑查看Couchbase团队发布的有关iOSAndroidXamarin的最新教程。

另外,如果您有兴趣进一步了解Couchbase Mobile的最新功能和最新功能,请查看Gone Mobile最新动态

翻译自: https://hackernoon.com/couchbase-mobile-the-power-of-nosql-on-the-edge-dkdhx30jl

couchbase

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值