Marklogic:数据摄取时生成主键

Marklogic:数据摄取时生成主键,marklogic,marklogic-8,marklogic-7,Marklogic,Marklogic 8,Marklogic 7,我正在使用JavaAPI从CSV摄取数据。我必须维护每个文档的主键 marklogic是否在插入期间提供任何唯一的自动生成id 若marklogic并没有提供,那个么我可以想到一件事,那个就是随机生成的hexString数字,但问题是若我在CSV中有大量记录要接收,有时这个随机数字可能会重复 请建议我如何处理这个用例 建议的方法是使用随机生成的ID值,该ID值的长度应足以保证数据集大小不存在冲突的可能性。因为你们是人类,你们仍然会被诱惑去检查碰撞,但数学说这只是浪费。如果您使用的是64位随机值,

我正在使用JavaAPI从CSV摄取数据。我必须维护每个文档的主键

marklogic是否在插入期间提供任何唯一的自动生成id

若marklogic并没有提供,那个么我可以想到一件事,那个就是随机生成的hexString数字,但问题是若我在CSV中有大量记录要接收,有时这个随机数字可能会重复


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

建议的方法是使用随机生成的ID值,该ID值的长度应足以保证数据集大小不存在冲突的可能性。因为你们是人类,你们仍然会被诱惑去检查碰撞,但数学说这只是浪费。如果您使用的是64位随机值,那么在40亿次之后发生碰撞的几率为50/50。太冒险了?如果这令人担忧,请使用128位随机值,因为在18万亿次之后,概率为50/50。看见 “”

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

如果数据是从CSV批量上传的,另一种选择是使用记录的偏移量(行或行#)作为URL的一部分,以及每个文件的唯一性,如文件名。

CSV数据本身通常有一列或多列组合,表示该数据集的主键。这也可以使用。

谢谢亨特哈克的回复。@亨特哈克这不是所有情况下都是正确的。作为一个数据库,它应该能够提供一种生成序列/随机数的方法。与Mongo DB一样,它为每个插入生成唯一的_id对象。MarkLogic中没有类似的东西吗?有没有可靠地生成序列的方法?绝对地是否要对唯一ID执行此操作?不会。因为它增加了开销,但没有任何好处,而且比起一个大的随机值与另一个值发生冲突,您的智能代码有一个bug的几率要大得多。顺便说一句,MongoDB不进行数据库检查。Mongo_id是客户端构建的,“是一个12字节的值,由4字节的时间戳(从纪元开始的秒数)、3字节的机器id、2字节的进程id和3字节的计数器组成”。重置你的时钟,祝你好运。。。