【问题标题】:how can i split couchbase document which exceeds 20MB of size? return message = ValueTooLarge, Success = false Couchbase 3.0.3 .net 4.5.1 C#如何拆分超过 20MB 大小的 couchbase 文档?返回消息 = ValueTooLarge,成功 = false Couchbase 3.0.3 .net 4.5.1 C#
【发布时间】:2015-07-17 09:36:07
【问题描述】:

物理大小超过 20MB 的文档大小,字符数> 22000000 请看下面的代码

var jsonDataRow = JsonConvert.SerializeXmlNode(objXML, Newtonsoft.Json.Formatting.None, true);
var document = new Document<string>
    {
        Id = "RR",
        Content = jsonDataRow
    };

var upsert = bucket.Upsert(document);

【问题讨论】:

  • 您的文档是什么样的?你能把它分解成更小的部分(参考与嵌入),然后对各个部分进行单独的查找吗?
  • 基本上我的文档是嵌入文档。 PSB {“_index”:“version_poc”,“_type”:“couchbaseDocument”,“_id”:“INVOICE_40827_2”,{“Document_Type”:“INVOICE”,“Document_ID”:“INVOICE_40827_2”,“INVOICE_LINE”:[{“ Document_Type": "INVOICE_LINE", "Document_ID": "LINE_94826_2", . . ] } "INVOICE_LINE": [ { "Document_Type": "INVOICE_LINE", "Document_ID": "INVOICE_LINE_94920_2", . . ] } . . . } } 这里存在 'n' 个 Invoice_Line(s)
  • 1) 要求是使用嵌入文档。 2)它是嵌套文档,在应用现场拆分文档也很困难,3)即使我拆分文档,我如何映射这些文档?

标签: c# couchbase nosql


【解决方案1】:

您需要创建一个包含子文档密钥的父文档:

{
   "id": "parent_doc_1",
   "children": [ "child_doc1", "child_doc2"]
}

然后将子文档单独存储:

{
    "id": "child_doc1",
    "parent_id": "parent_doc_1"
}

{
  "id": "child_doc2",
  "parent_id": "parent_doc_1"
}

然后拉出父文档并获取子密钥 (id) 并使用您选择的 SDK 批量获取这些密钥。像这样的:

var parent = await bucket.GetAsync<dynamic>("parent_doc_id");
if (parent.Success)
{
   var children = await bucket.GetAsync<dynamic>(parent.Value.children);
   //do stuff
}

这不是真正的代码,但您应该可以在这里理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多