Couchbase извлекает реляционные документы в nodeJS
Я до сих пор спорю, какой путь и, возможно, хранить определенную информацию в своем собственном документе. так, например, клиент может иметь адреса с каждым адресом, который будет его собственным документом, а затем в документе клиента будет храниться массив ключей ref, хранящихся под адресами. Преимущество было бы в том, что я мог бы обновлять эти документы просто на основе значения ключа против необходимости сначала получить документ клиента, найти индекс массива адреса, а затем либо изменить весь документ, либо использовать субдок для замены содержимого массива. с указателем. То, где я застрял, - это как получить эти ссылки на поддок. N1QL - единственный путь, или же KV API предлагает способ, позволяющий быстро получить весь документ клиента, затем перебрать массив адресов и таким образом получить все документы, на которые есть ссылки. Я знаю, что Ottoman предлагает что-то подобное, но у меня проблема с последней версией SDK 2.6 и Ottoman, так как она не очень хорошо поддерживается. Так что, надеюсь, кто-то может поделиться некоторым пониманием, что и почему это лучший способ.
1 ответ
Если вы хотите положиться на ключ / значение, то вам нужно выполнить множественный поиск, как вы описали. Я не очень знаком с Ottoman: он может сделать это для вас, но за кулисами это все равно будет несколько операций с ключом / значением и / или N1QL.
С N1QL вы можете выполнять СОЕДИНЕНИЯ, но опять же, за кулисами, это в конечном итоге приведет к извлечению документов по ключу / значению. Он просто делает эти дополнительные шаги для вас. Прямой ключ / значение всегда будет самым быстрым маршрутом.
Если вы все еще находитесь в процессе принятия решения о том, следует ли разбивать данные на несколько документов или "денормализовать" данные в один документ, вам следует подумать о том, как часто вы собираетесь обращаться к адресам "клиент +" и как часто Вы идете к клиенту / доступу отдельно. Если вы часто читаете / пишете адрес клиента +, рассмотрите возможность помещения его в один документ. В противном случае рассмотрите возможность размещения его в нескольких документах.
Третий вариант - хранить его в обоих местах, а точнее "кэшировать" адресные данные в клиентском документе. Это сложно, потому что это может быть не синхронизировано, если вы не будете осторожны. Поэтому убедитесь, что оно того стоит, прежде чем идти по этому пути.