欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Couchbase Mobile:NoSQL在边缘上的力量

程序员文章站 2024-01-28 10:01:04
...

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

输入: 嵌入式数据库

如果您不熟悉移动和物联网(或者如今孩子们称其为边缘)数据库环境,您可能会直接前往您最喜欢的搜索引擎来研究这些选项。

剧透警报...有很多。

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

边缘上的Couchbase

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

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

  1. Couchbase Lite ,适用于您的移动应用程序的嵌入式NoSQL JSON文档样式数据库
  2. Sync Gateway ,一种面向Internet的同步机制,可在移动客户端和服务器之间安全地同步数据,以及
  3. Couchbase Server ,一个高度可扩展的分布式NoSQL数据库平台。
Couchbase Mobile: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上进行查询的下一步围绕实时查询展开 实时查询保持活动状态,并监视数据库中的更改。 实时查询是一种构建响应式用户界面(尤其是表/列表视图)的最新方法,以使用户界面保持最新。

只需在查询中添加侦听器,您就可以接收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 Mobile:NoSQL在边缘上的力量

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

对等复制

点对点同步允许运行Couchbase Lite的设备直接相互之间进行数据同步。 作为此过程的一部分,Couchbase Lite负责存储数据并跟踪数据交换,但不负责数据传输本身。

Couchbase Mobile:NoSQL在边缘上的力量

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

同步网关

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

Couchbase Mobile:NoSQL在边缘上的力量

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

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

幸运的是,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最新一集

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