Couchbase предлагает функциональность представления карты с уменьшением, которая может помочь в преобразовании документа JSON (MAP), а затем в применении операции сокращения к группе преобразованных JSON документов (REDUCE).
I есть требование генерировать двоичные дерево (и) LCRS (левый дочерний элемент справа) из этих документов. Рассмотрим следующий сценарий:
У меня есть два JSON документа в базе данных couchbase:
A: { subDocs: [
{subDoc: 1},
{subDoc: 2},
{subDoc: 3}
],
output: "A satisfied"
}
B: { subDocs: [
{subDoc: 1},
{subDoc: 3},
{subDoc: 5}
],
output: "B satisfied"
}
Требуется сгенерировать двоичное дерево из массива subDocs вышеупомянутого JSON документы. Выходное сообщение из каждого из вышеуказанных документов будет находиться на последнем узле соответствующих двоичных деревьев. Чтобы удовлетворить это требование, я создал индекс представления couchbase с функцией map, которая генерирует дерево из массива subdocs для каждого JSON документа. После применения операции map полученные JSON выглядят следующим образом:
1: { label: 1,
left: {
label: 2,
left: {
label: 3,
left: null,
right: null,
outputMsgDocId: "A"
},
right: null
},
right: null
}
1: { label: 1,
left: {
label: 3,
left: {
label: 5,
left: null,
right: null,
outputMsgDocId: "B"
},
right: null
},
right: null
}
Обратите внимание, что ключом вышеупомянутого JSON документа является метка узла root, здесь он равен 1. Теперь так как у меня есть два дерева с одинаковыми root узлами, я могу объединить их, чтобы создать одно двоичное дерево. Для этого я написал функцию Reduce, которая выдает окончательный JSON, например:
1: { label: 1,
left: {
label: 3,
left: {
label: 2,
left: null,
right: {
label: 5,
left: null,
right: null,
outputMsgDocId: "B"
},
outputMsgDocId: "A"
},
right: null
},
right: null
}
Обратите внимание, что outputMsgDocId в вышеприведенном дереве перемещен в другие узлы из-за реструктуризации дерева.
Теперь описанный выше процесс работает очень хорошо. Но, читая документацию couchbase, я обнаружил, что было упомянуто, что функция Reduce не должна использоваться для преобразования структуры JSON или объединения элементов вместе. Кроме того, в документации было написано, что для составных структур максимальный размер вывода может составлять 64 КБ. Это заставило меня немного скептически относиться к развертыванию этого решения с помощью карты couchbase. Мой вопрос: может ли couchbase поддерживать такую сложную карту, сокращать функции в течение длительного периода времени, пока увеличивается объем данных? Является ли хорошим выбором использование представлений couchbase для создания деревьев из JSON документов? Или я должен найти какой-то другой способ генерации таких деревьев и последующего сохранения их в контейнерах на диване?