#module #query-optimization #xquery #marklogic
Вопрос:
Как внедрить функцию RMDB с автоматическим приращением первичного ключа в MarkLogic?
Любой побочный эффект, если этот ключ хранится как элемент в XML-файле конфигурации и для его создания используется шаблон «Одноэлементный» библиотеки XQuery. (Несколько кодов Xquery difffernet будут использовать одну и ту же библиотеку для создания уникального ключа.) Я предполагаю, что это не сработает для кластера ML? Он может работать только на одном узле ML. Будет ли это нижней частью многопоточной подпрограммы Corbs?
Ответ №1:
Увеличение цифровых клавиш обычно считается анти-шаблоном, так как для этого потребуется блокировка и общее состояние, что может стать узким местом производительности. Это будет работать, но это просто ограничивает вашу производительность и пропускную способность.
Вам действительно следует подумать о том, нужны ли вам последовательные числовые значения или просто уникальные числовые значения.
Вы можете использовать xdmp:random()
для генерации случайного 64-разрядного числового значения. Это просто не будет последовательным.
Или для нечисловых уникальных значений, sem:uuid-string()
Если вам действительно, действительно нужны числа с автоматическим увеличением, вам понадобится документ для отслеживания этого числа, а затем для получения следующего значения в последовательности потребуется прочитать этот документ и обновить его значение (что приведет к исключительной блокировке записи). Вы могли бы стать более продуманными и иметь сегменты, ответственные за диапазоны чисел, в попытке получить некоторую дополнительную пропускную способность и параллельную активность за счет не 100% — ной последовательности в отношении времени вставки. Вы могли бы черпать вдохновение в Твиттере Snowflake: https://github.com/твиттер-архив/снежинка/дерево/снежинка-2010