Hi

Follow up on the previous thread, I wanted to implement bulk insert in single 
transaction. I have tested using db:add and db:store and that seems to be 
working. However, using db:store, it appears that the file needed to be 
persisted in the file system, which is one of the limitation that I have. I’m 
currently having these files as InputStream for binary, is there a way that I 
can insert binary files in a single batch transaction using basexclient 
basex/BaseXClient.java at master · BaseXdb/basex · 
GitHub<https://github.com/BaseXdb/basex/blob/master/basex-examples/src/main/java/org/basex/examples/api/BaseXClient.java>
 ? Or some other alternative ?

Thanks,
-Genneva

From: 
<basex-talk-boun...@mailman.uni-konstanz.de<mailto:basex-talk-boun...@mailman.uni-konstanz.de>>
 on behalf of Dirk Kirsten <d...@basex.org<mailto:d...@basex.org>>
Date: Thursday, May 19, 2016 at 11:59 PM
To: 
"basex-talk@mailman.uni-konstanz.de<mailto:basex-talk@mailman.uni-konstanz.de>" 
<basex-talk@mailman.uni-konstanz.de<mailto:basex-talk@mailman.uni-konstanz.de>>
Subject: Re: [basex-talk] multiple inserts/update/deletes in single transaction


Hello Genneva,

this is expected behaviour. BaseX script executed each command separately. This 
is by design and required by the nature of XQuery (Update), which by design 
always executes as one transaction - Which can be difficult do deal with if you 
have a large amount of data and have to e.g. hold it in memory.

Each XQuery runs in one single transaction, so you can simply add your 
documents via XQuery, e.g.

db:add("DB", "embedded7.xml"),
db:add("DB", "embedded8.xml")

Cheers

Dirk

On 05/19/2016 08:11 PM, Wang, Genneva wrote:
Hi

I’m trying to figure out whether batched transaction would work for basex, and 
I came across the RUN and EXECUTE command specified in 
http://files.basex.org/releases/8.4/BaseX84.pdf page 58-59.  The document 
mentioned following in the summary section:

RUN:Evaluates the contents of file as XQuery expression. If the file ends with 
the suffix .bxs, the file content will be evaluated as command script. This 
command can be used to run several commands in a single transaction
EXECUTE: Evaluates the specified input as command script. This command can be 
used to run several commands in a single transaction.

I’ve tried this myself
For example, I’d like to know if I batch 2 inserts, if one fails, would both 
inserts get rollback.

I’m using a simple .bxs (attached and also listed below for your convenience) 
and run the execute using GUI.

OPEN test
ADD TO embedded7.xml <root>embedded</root>
ADD TO embedded8.xml <root>embedded
CLOSE

The second ADD (embedded8.xml) is  not a valid xml format so I’m expecting it 
to fail, and rollback both files if any of them have already added. But after 
executing this script, I’m seeing embedded7.xml have been added.

Would you be able to confirm if this is the expected behavior ? If so,  is 
there anyway that I can batch multiple inserts and ensures that these batch of 
files can be committed at the same time, and rollback  all together if any of 
the file has an error ?

Thank you very much for your help.


--
Dirk Kirsten, BaseX GmbH, http://basexgmbh.de
|-- Firmensitz: Blarerstrasse 56, 78462 Konstanz
|-- Registergericht Freiburg, HRB: 708285, Geschäftsführer:
|   Dr. Christian Grün, Dr. Alexander Holupirek, Michael Seiferle
`-- Phone: 0049 7531 91 68 276, Fax: 0049 7531 20 05 22

Reply via email to