module - 如何使用 Xquery 为 MarkLogic 实现自动递增数字主键
问题描述
如何在 MarkLogic 中实现Auto-Increment-Primary-Key RMDB 功能?
如果该键作为元素存储在配置 XML 文件中并使用 XQuery 库的“单例”模式来生成它,则会产生任何副作用。(多个 difffernet Xquery 代码将使用同一个库来生成唯一键。)我猜它不适用于 ML 集群?它可能仅适用于单个节点 ML。这会是多线程 Corbs 常规的瓶颈吗?
解决方案
递增数字键通常被认为是一种反模式,因为它需要锁定和共享状态,这可能成为性能瓶颈。它会起作用,但它只会限制您的性能和吞吐量。
您应该真正考虑是否需要连续的数值,或者只需要唯一的数值。
您可以利用xdmp:random()
它来生成随机的 64 位数值。它只是不会是顺序的。
或者,对于非数字唯一值,sem:uuid-string()
如果您真的,真的,需要自动递增的数字,那么您将需要一个文档来跟踪该数字,然后获取序列中的下一个值将涉及读取该文档并更新它的值(这将获得独占写锁)。您可以做得更精细,并让分片负责数字范围,以尝试获得一些额外的吞吐量和并行活动,而代价是插入时间不是 100% 连续的。你可以从 Twitter 雪花中汲取灵感:https ://github.com/twitter-archive/snowflake/tree/snowflake-2010
推荐阅读
- mapbox - 使用 Mapbox-sdk v8.6.1 在 Android 中将标记设置为当前位置
- javascript - 如何将 javascript 外部文件(如 bootstrap、jQuery)添加到 reactjs 应用程序
- javascript - 如何一次检查所有表是否为空?
- javascript - JavaScript:承诺回调执行
- css - 将单位添加到计算
- r - 如何在 R 中加载多个“.RData”并将它们组合为 mcmc 列表?
- python - 使用带有单元格边框的 2.color_scale 导出 excel
- mysql - 考虑到高性能,使用 sql 获得所需的输出?
- python - 熊猫特定条件下的 pd.eval()
- python - Web Scraping:试图检索所有歌曲,但它只返回一首歌词