Marklogic:在数据摄取时生成主键

Marklogic : Generate primary key while data ingestion

我正在使用 java-api 从 CSV 中提取数据。我必须维护每个文档的主键。

Does marklogic provide any unique auto-generated id during insert ?

如果 marklogic 不提供,那么我可以想到一件事,它是随机生成的 hexString 数字,但问题是如果我有大量 CSV 记录要摄取,有时这个随机数字可能会重复。

请建议我如何处理这个用例。

建议的方法是使用随机生成的 ID 值,该值的长度要足够长,以至于对于您的数据集大小来说,发生冲突的可能性是不切实际的。因为你是人,所以你仍然会想要检查碰撞,但数学表明这只是浪费。如果您使用的是 64 位随机值,那么在 40 亿次之后发生碰撞的几率为 50/50。风险太大?如果这令人担忧,请使用 128 位随机值,因为在 18 千万亿之后它的概率为 50/50。看 “Probability of 64-bit hash code collisions

xdmp:random() 是一个 64 位伪随机生成器 (PRNG),具有此类属性,在可用时使用符合 FIPS 的实现。 它与内部用于生成文档和片段 IDS 的相同。 因此,在实践中,您无法更好地高效生成唯一 ID。 是的,这是大多数人(包括我自己)一开始难以接受的事情。
现在这不一定与在某些特定上下文中保证相同,并且您使用它会生成唯一的 URI(这是 ML 版本的 GUID 或数据库范围 'primary key')。为此,您必须保证 URI 的唯一来源是您生成的 URI,并且您充分利用所有 64 位。 如果您想向自己证明无论发生什么事情它都绝对独一无二,那么您需要某种事务性原子计数器。 这些很容易制作(单个共享文档的文档读取-更新-写入-提交)但是在规模上非常慢。

如果数据是从 CSV 批量上传的,另一种选择是使用记录的偏移量(行或行号)作为 URL 的一部分,以及每个文件的独特之处,例如文件名。
CSV 数据本身通常有一列或多列表示该数据集的主键。那个也可以用