[MarkLogic Dev General] Unique key construction

Darin McBeath ddmcbeath at yahoo.com
Mon Mar 29 08:35:27 PST 2010


Yes, that would likely be more efficient ... forgot that his function had been added :-)





________________________________
From: Michael Blakeley <michael.blakeley at marklogic.com>
To: General Mark Logic Developer Discussion <general at developer.marklogic.com>
Cc: "McBeath, Darin W (ELS-STL)" <D.McBeath at elsevier.com>
Sent: Mon, March 29, 2010 12:18:26 PM
Subject: Re: [MarkLogic Dev General] Unique key construction

Wouldn't it be more efficient to add xdmp:elapsed-time()?

-- Mike

On 2010-03-29 08:19, McBeath, Darin W (ELS-STL) wrote:
> I believe this could be fixed (if necessary) by wrapping the current-dateTime() call with a xdmp:eval.
>
> xdmp:eval("current-dateTime()")
>
> Darin.
>
> -----Original Message-----
> From: general-bounces at developer.marklogic.com on behalf of Geert Josten
> Sent: Mon 3/29/2010 10:00 AM
> To: General Mark Logic Developer Discussion
> Subject: RE: [MarkLogic Dev General] Unique key construction
>
> Note: this code will return only one unique value per transaction. current-datetime() returns the same value throughout the transaction as MarkLogic Server is based on point-in-time querying..
>
> Kind regards,
> Geert
>
> ________________________________
> From: general-bounces at developer.marklogic.com [mailto:general-bounces at developer.marklogic.com] On Behalf Of Keith L. Breinholt
> Sent: maandag 29 maart 2010 16:45
> To: General Mark Logic Developer Discussion
> Subject: RE: [MarkLogic Dev General] Unique key construction
>
>
> Here is a UUID version 3 implementation that we use for URLs that is unique to the name, host and time created:
>
>
>
> declare variable $g_defaultNamespace as xs:string := xdmp:host-name(xdmp:host());
> declare variable $g_uuidVersion as xs:unsignedLong := 3;
> declare variable $g_uuidReserved as xs:unsignedLong := 8;
>
> (:
>    Calculate the UUID and set the UUID property on the file.
>
>    The layout of a UUID is as follows.
>      0               1               2               3
>      0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f
>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>     |                          time_low                             |
>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>     |       time_mid                |           time_hi     |version|
>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>     |clk_seq_hi |res|  clk_seq_low  |         node (0-1)            |
>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>     |                         node (2-5)                            |
>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>      0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f
>
>     This implements version 3 of the UUID specification.
>     The timestamp is a 60-bit value.
>     The clock sequence is a 14 bit value.
>     The node is a 48-bit name value.
> :)
> declare function meta:uuid( $uri as xs:string )
> as xs:string
> {
>    meta:uuid( $uri, $g_defaultNamespace )
> };
>
> declare function meta:uuid( $uri as xs:string, $namespace as xs:string )
> as xs:string
> {
>    (: calculate md5 with a dateTime for our random values :)
>    let $hash := xdmp:md5( concat( $uri, xs:string(current-dateTime()), $namespace ) )
>    return
>      concat (
>        substring( $hash, 1, 15 ),
>        (: set version bits :)
>        xdmp:integer-to-hex($g_uuidVersion),
>        (: set reserved bits :)
>        substring( $hash, 17, 1 ),
>        xdmp:integer-to-hex((xdmp:hex-to-integer(substring($hash, 18, 1)) idiv 4) + $g_uuidReserved),
>        substring( $hash, 19, 14 )
>        )
> };
>
>
>
>
> Keith L. Breinholt
>
> breinholtkl at ldschurch.org
>
>
>
>
>
> -----Original Message-----
> From: general-bounces at developer.marklogic.com [mailto:general-bounces at developer.marklogic.com] On Behalf Of Geert Josten
> Sent: Monday, March 29, 2010 2:35 AM
> To: General Mark Logic Developer Discussion
> Subject: RE: [MarkLogic Dev General] Unique key construction
>
>
>
> Hi Deepak,
>
>
>
> Look in the Modules, not the Admin folder. Here is a typical case taken from triggers.xqy:
>
>
>
> define function
>
> get-unique-trigger-id()
>
> as xs:unsignedLong
>
> {
>
>    let $col := triggers-collection(),
>
>        $attempt := xdmp:random(),
>
>        $doc-uri := fn:concat(triggers-uri(), xs:string($attempt)),
>
>        $docs := for $d in fn:collection($col) return fn:base-uri($d)
>
>    return
>
>     if ($doc-uri = $docs)
>
>     then get-unique-trigger-id()
>
>     else $attempt
>
> }
>
>
>
> You can make it slightly more robust by counting the attempts and throwing an error if you need to many attempts. The number of unique numbers generated by xdmp:random is large though, so that is only necessary when you have good reason to believe that you could approach that limit..
>
>
>
> Kind regards,
>
> Geert
>
>
>
>>
>
>
>
>
>
> drs. G.P.H. (Geert) Josten
>
> Consultant
>
>
>
>
>
> Daidalos BV
>
> Hoekeindsehof 1-4
>
> 2665 JZ Bleiswijk
>
>
>
> T +31 (0)10 850 1200
>
> F +31 (0)10 850 1199
>
>
>
> mailto:geert.josten at daidalos.nl
>
> http://www.daidalos.nl/
>
>
>
> KvK 27164984
>
>
>
> P Please consider the environment before printing this mail.
>
> De informatie - verzonden in of met dit e-mailbericht - is afkomstig van Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit bericht kunnen geen rechten worden ontleend.
>
>
>
>> From: general-bounces at developer.marklogic.com
>
>> [mailto:general-bounces at developer.marklogic.com] On Behalf Of
>
>> deepak mohan
>
>> Sent: zondag 28 maart 2010 17:44
>
>> To: general at developer.marklogic.com
>
>> Subject: [MarkLogic Dev General] Unique key construction
>
>>
>
>> Hi All,
>
>>
>
>> Please tell me how ML constructs the unique ID while creating
>
>> any ML entities(App Servers, DB, forest etc.). I need to
>
>> generate a unique ID. I tried dig into the ML Admin modules
>
>> APi, I couldnot find the algo. Are they using random() and
>
>> check for existence?
>
>>
>
>> Thanks,
>
>> Deepak Mohanakrishnan.
>
>>
>
>>
>
>> ________________________________
>
>>
>
>> Your Mail works best with the New Yahoo Optimized IE8. Get it
>
>> NOW!
>
>> <http://in.rd.yahoo.com/tagline_ie8_new/*http://downloads.yaho
>
>> o.com/in/internetexplorer/>  .
>
>>
>
> _______________________________________________
>
> General mailing list
>
> General at developer.marklogic.com
>
> http://xqzone.com/mailman/listinfo/general
>
>
> NOTICE: This email message is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.
>
>
> _______________________________________________
> General mailing list
> General at developer.marklogic.com
> http://xqzone.com/mailman/listinfo/general

_______________________________________________
General mailing list
General at developer.marklogic.com
http://xqzone.com/mailman/listinfo/general
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://xqzone.marklogic.com/pipermail/general/attachments/20100329/8611ba61/attachment-0001.html


More information about the General mailing list