Thanks a lot:) I read some document today, however I still not very clear about the difference between replace and insert.
We're building an application which will track all historical data. And based on my known, both replace-node and insert can update the existing data. For replace node, MarkLogic will create a new version of the fragement . For insert, if URI already exist, will replace the content. So, my question is what the difference? And, is there any recommendation to use which one for updating? Thanks very much. Regards, Guoliang On Nov 21, 2013 2:26 AM, "Michael Blakeley" <[email protected]> wrote: > Every document has a URI, and that URI acts as a primary key. A call to > doc($uri) is the fastest way to retrieve a document, so choose your primary > key with that in mind. Ask yourself what might make sense. > > The primary key often comes from the XML itself, but not always. For > example you might receive documents from each of a number of sources, each > sending one document daily. In your application you might use that date + > source key as your primary document reference. In that case it might make > sense to create URIs like YYYY-MM-DD-SOURCE or SOURCE-YYYY-MM-DD. > > Document URIs can also be organized in a directory structure, created > implicitly by any '/' characters. So if documents were structured by date > and source with one document per day as described about, the URI > /YYYY/MM/DD/SOURCE would allow efficient access by year, year-month, and > year-month-day via xdmp:directory, as well as date-source via fn:doc. > > You might also consider putting SOURCE first in this structure: > /SOURCE/YYYY/MM/DD. Ask yourself which way would be more useful. What are > the common access patterns? The point is to design the URIs to support your > application and the way it works with the data. > > While an ideal URI is based on application access patterns, there are > cases where documents simply do not have a natural primary key. For those > situations you might consider xdmp:random or xdmp:hash64. Along with > http://markmail.org/message/mm5vtacpdzwfy44j you might find this code > useful: > > (: Return a 32-digit hex id from the inputs. :) > declare function local:generate-uuid2( > $x as xs:unsignedLong, > $y as xs:unsignedLong) > as xs:string > { > let $x := xdmp:integer-to-hex($x) > let $y := xdmp:integer-to-hex($y) > return concat( > substring('0000000000000000', 1, 16 - string-length($x)), $x, > substring('0000000000000000', 1, 16 - string-length($y)), $y) > }; > > (: Generate a new id, without reserving it. :) > declare function local:new() > as xs:string > { > let $id := local:generate-uuid2(xdmp:random(), xdmp:random()) > let $uri := '/sensor-data/'||$id > return ( > (: Collisions should be very rare, but handle them anyway. :) > if (exists(doc($uri))) then local:new() > else ($id, xdmp:lock-for-update($uri))) > }; > > local:new() > > -- Mike > > On 20 Nov 2013, at 00:20 , Guoliang Li <[email protected]> wrote: > > > Thanks Mike. > > > > Seems there's no big difference between this two query. I got > this from dev guide: > > "in the case of modifying a document, MarkLogic server creats new > versions of the fragments ivolved in the opperation." > > > > So, I'll treat document as row of table, and the primary key will > be the URI, right? However, I cannot find a perfect way to generate > the URI, any suggestions? Thanks. > > > > Regards, > > GL > > On Nov 20, 2013 12:20 PM, "Michael Blakeley" <[email protected]> wrote: > > Broadly speaking there isn't much difference. Functions for node-level > update are mostly just a convenience for developers. Internally, both end > up doing much the same thing. An update writes an entire XML tree, plus the > term-list entries for any relevant indexes. > > > > That might sound inefficient if you are thinking about documents as > tables. But in most cases documents act more like rows. Try to design that > way, with a primary key as the document URI. > > > > -- Mike > > > > On 19 Nov 2013, at 19:36 , Guoliang Li <[email protected]> wrote: > > > > > Hi all, > > > > > > I'm totally new to MarkLogic. > > > I know i can update a field by node-replace or document-insert. > > > May i know the difference in term of poformance? Thanks. > > > > > > Btw, Our app will keep all history data. > > > > > > Regards, > > > GL > > > > > > _______________________________________________ > > > General mailing list > > > [email protected] > > > http://developer.marklogic.com/mailman/listinfo/general > > > > _______________________________________________ > > General mailing list > > [email protected] > > http://developer.marklogic.com/mailman/listinfo/general > > _______________________________________________ > > General mailing list > > [email protected] > > http://developer.marklogic.com/mailman/listinfo/general > > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general >
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
