gpt4 book ai didi

c# - Couchbase Lite 是用来查询数据的吗?

转载 作者:行者123 更新时间:2023-11-30 23:27:16 24 4
gpt4 key购买 nike

我们正在考虑为使用 Xamarin.IOS 构建的 iPad 应用程序实现 Couchbase。这是我们第一次深入研究 Couchbase,并希望确保我们的用例可以通过 Couchbase 实现。

我们的主要用例是能够查询存储在 NoSQL 数据库中的数据。 View 似乎是执行此操作的唯一方法。不能像 MongoDB 等其他 NoSQL 数据库那样直接查询实际文档,这似乎很奇怪。

假设我们的数据采用以下格式:

{
"Id":1,
"FirstName":"John",
"LastName":"Doe",
"DepartmentId":1,
"StatusId":2
}

我们想按如下方式查询此数据:

  1. DepartmentId = 1 的所有记录
  2. StatusId = 2 的所有记录
  3. DepartmentId = 1 AND St​​atusId = 2 的所有记录
  4. DepartmentId = 1 或 StatusId = 2 的所有记录

从这个演示文稿中,http://www.slideshare.net/Couchbase/advanced-couchbase-lite我可以看到我们可以使用复合键创建 View 。类似于 [ DepartmentId, StatusId ]

但是我们无法仅使用复合键的一部分进行查询。 Couchbase 似乎只有在复合键的两个部分都被传递时才会返回结果,例如。 [ 1, 2 ] 这将返回部门 1 和状态 2 的所有记录。

Couchbase 完全可以做到这一点吗?还是我们应该寻找其他解决方案?我们不想采用 SQL 方式,因为我们有相当复杂的 JSON 对象,并且不想费心将其转换为表格数据。 NOSQL 是前进的方向,但这对我们来说是错误的 NOSQL DB 吗?

我们尝试过的 C#:

        // Create the View
var view = db.GetView("all-docs");
view.SetMap((doc, emit) =>
{
var keys = new List<object>();
keys.Add(doc["DepartmentId"].ToString());
keys.Add(doc["StatusId"].ToString());
emit(keys, doc);
}, "1");

// Create Query
var query = view.CreateQuery();
List<Object> searchQuery = new List<Object>();
List<Object> key = new List<Object>();

// Add Query for Keys
key.Add(status);
key.Add(priority);
searchQuery.Add(key);
query.Keys = searchQuery;

// Run Query
var results = await query.RunAsync();

最后,如果我们处理大约 1000-5000 个对象,是否有关于 Couchbase Lite Queries 性能的基准?

最佳答案

要查询一系列值,您可以使用 startKeyendKey,如 http://developer.couchbase.com/documentation/mobile/1.2/develop/references/couchbase-lite/couchbase-lite/query/query/index.html 中所述.所以当你有一个基于[DeptId, StatusId]的 View 时,你会得到

  • 通过将 startKey 设置为 [1, 0]endKey,所有 DeptId = 1 的文档> 到 [1, maxint]

  • DeptId = 1 和 StatusId = 2 的所有文档,方法是将键设置为 [1, 2]

  • StatusId = 2 的所有文档,方法是使用另一个将 StatusId 作为第一个或唯一组件的 View 。

  • 我不知道有什么方法可以直接模拟 OR 运算符,因此您可能需要分别检索这两个集合并以编程方式合并它们。 (这适用于 CB lite。在 CB 服务器上,您拥有更强大的 N1QL。)

移动设备上的整体性能不仅取决于 CB lite 本身,还取决于从数据库中检索文档后的处理方式。当然,从关系数据库中获取 5 个属性的 100 条记录比从 100 个复杂的 JSON 文档构建 Java 对象网格要快。因此,恐怕您必须使用自己的文档大小、结构和查询结果来对自己进行基准测试。

关于c# - Couchbase Lite 是用来查询数据的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36598905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com