But you can execute SQL Script to execute server-side tx:

http://www.orientechnologies.com/docs/last/orientdb.wiki/SQL-batch.html

Lvc@

On 17 October 2014 17:06, Luca Garulli <[email protected]> wrote:

> Hi Alan,
> This has been moved to 2.2, sorry.
>
> Lvc@
>
> On 17 October 2014 14:43, Alan Johnson <[email protected]> wrote:
>
>> Luca, have the issues raised in this thread been resolved in the v2 drop?
>> If partial, in what way?
>>
>> Thanks!
>>
>> Alan
>>
>> On Monday, July 23, 2012 7:58:45 AM UTC-4, Lvc@ wrote:
>>>
>>> Hi,
>>> not yet. This is something we will think for 2.0.
>>>
>>> Lvc@
>>>
>>> On 23 July 2012 13:27, Danny Thomas <[email protected]> wrote:
>>> > Luca, are distributed transactions also on the road map in that kind
>>> of
>>> > timescale?
>>> >
>>> > Danny
>>> >
>>> >
>>> > On Monday, 23 July 2012 11:01:02 UTC+1, Lvc@ wrote:
>>> >>
>>> >> Hi Mic,
>>> >> you're right: transactions against the "remote" protocol have some
>>> >> limitations we'd like to fix in 1.2. Probably not al of them but
>>> most.
>>> >>
>>> >> Lvc@
>>> >>
>>> >> On 22 July 2012 02:41, Mich Geni <[email protected]> wrote:
>>> >>>
>>> >>> Hi Luca,
>>> >>>
>>> >>> What are the plans in the roadmap for implementing support for real
>>> ACID
>>> >>> local, remote and distributed transactions, coherently?
>>> >>>
>>> >>> Reference Links:
>>> >>>
>>> >>> http://code.google.com/p/orient/issues/detail?id=442
>>> >>> http://code.google.com/p/orient/issues/detail?id=931
>>> >>> http://code.google.com/p/orient/issues/detail?id=784
>>> >>> http://code.google.com/p/orient/issues/detail?id=90
>>> >>> http://code.google.com/p/orient/issues/detail?id=12
>>> >>> http://code.google.com/p/orient/issues/detail?id=890
>>> >>> http://code.google.com/p/orient/issues/detail?id=484
>>> >>> http://code.google.com/p/orient/issues/detail?id=713
>>> >>> http://code.google.com/p/orient/issues/detail?id=181
>>> >>> https://groups.google.com/d/msg/orient-database/7zvllV_
>>> ItYo/WM1rg9cyozIJ
>>> >>> https://groups.google.com/forum/#!topic/orient-database/sqo84YE6UV8
>>> >>> ...and other posts by users on OrientDB google group
>>> >>>
>>> >>>
>>> >>> To have a real ACID Transactions compliant database, we need serious
>>> >>> consideration of the issues involved.
>>> >>>
>>> >>> I think, we need a complete new mindset, and a world-view to create
>>> a
>>> >>> base for supporting transactions.
>>> >>>
>>> >>> SideNote: Transactions are a necessity. We cannot go to classical
>>> era of
>>> >>> RDBMSes for transactions support. All new applications surround the
>>> NoSQL
>>> >>> solutions. There are so many use-cases in modern applications, where
>>> >>> consistency is a must. So who is the first to fully support them?
>>> will be a
>>> >>> clear winner.
>>> >>>
>>> >>>
>>> >>> Regards,
>>> >>>
>>> >>> Mic
>>> >>>
>>> >>>
>>> >>> On Monday, 2 July 2012 22:53:22 UTC+5, Lvc@ wrote:
>>> >>>>
>>> >>>> On 1 July 2012 11:43, Mich Geni <[email protected]> wrote:
>>> >>>>>
>>> >>>>> Hi Luca,
>>> >>>>>
>>> >>>>> I am glad to see caring and thoughtful people here.
>>> >>>>> Yes, a combination of client and server involvement in the
>>> transaction
>>> >>>>> will be much beneficial.
>>> >>>>>
>>> >>>>> e.g. to elaborate it more:
>>> >>>>>
>>> >>>>> When a client begins a transaction, it notifies the server. The
>>> server
>>> >>>>> creates a transaction slot/session for the client. Which is also
>>> an
>>> >>>>> indication (to server) from client, that write the changes only
>>> when I say
>>> >>>>> commit. And behave accordingly.
>>> >>>>
>>> >>>> +1
>>> >>>>>
>>> >>>>> The transaction can have a timeout (on server), in case the client
>>> >>>>> begins a transaction and never commits it, or disconnects in the
>>> middle. In
>>> >>>>> that case the slot/session will be destroyed, and all changes
>>> discarded.
>>> >>>>
>>> >>>> +1
>>> >>>>>
>>> >>>>> During the transaction: the changes in data client make, should
>>> remain
>>> >>>>> at client side, to prevent unnecessary data transfer. But when
>>> client needs
>>> >>>>> something from server, the server cooperates in a manner (and send
>>> it to the
>>> >>>>> client such) that the client thinks it as actual information. We
>>> can call it
>>> >>>>> transaction contextual information. In this way, the client will
>>> have
>>> >>>>> complete (but fictional and also sometimes real) information
>>> necessary for
>>> >>>>> the transaction. So server's transaction awareness is crucial.
>>> >>>>
>>> >>>> +1
>>> >>>>>
>>> >>>>> We can have a some special format/notation/range for RIDs during
>>> >>>>> transactions. This will be a flag for client, server and
>>> developer/admin,
>>> >>>>> that this information is contextual. But these RIDs should not be
>>> isolated
>>> >>>>> only at client side, such that the server has no information about
>>> them. But
>>> >>>>> I think such contextual RIDs should be provided by server on
>>> client's
>>> >>>>> request, and booked for it until free'd by client. So that client
>>> can use it
>>> >>>>> for its transaction, and server can map/translate them later after
>>> commit to
>>> >>>>> actual/real RIDs.
>>> >>>>
>>> >>>> This is already implemented with transient RIDs having negative
>>> numbers,
>>> >>>> example: #3:-4
>>> >>>>>
>>> >>>>> The client will create a changeset (a small graph, a set of
>>> documents
>>> >>>>> etc), containing some information to be made real/actual or
>>> decided on
>>> >>>>> server only (or in other words leave some patches in the changeset
>>> for the
>>> >>>>> server to cover up). And send this information to server for
>>> commit. The
>>> >>>>> server will validate those changes (check if valid and possible)
>>> and write
>>> >>>>> the changes as permanent.
>>> >>>>
>>> >>>> This is already in this way.
>>> >>>>>
>>> >>>>> People using the transactions API, should be educated to do only
>>> atomic
>>> >>>>> operations in transactions. (an atom is very very small, by the
>>> way). So
>>> >>>>> bulk (insertions/updation/deletion) operations should not be done
>>> in
>>> >>>>> transactions. As transactions are meant to make small changes and
>>> to ensure
>>> >>>>> data integrity. In this way, the data exchanged between client and
>>> server
>>> >>>>> will be minimum for a transaction.
>>> >>>>
>>> >>>> This is partially true. Now transactions are used to speed up
>>> "remote"
>>> >>>> operations by grouping them in transactions of X operations. This
>>> is used
>>> >>>> setting the tx.useTxLog(false).
>>> >>>>>
>>> >>>>> In case: a record X (set of records, or portion of graph) was read
>>> by a
>>> >>>>> client A at time t1. Then at time t2 (i.e. t2 > t1), client B
>>> reads and make
>>> >>>>> changes in it/them, in a transaction. Then at time t3  (i.e. t3 >
>>> t2) , when
>>> >>>>> client A wants to make changes in it/them, the server should give
>>> an error,
>>> >>>>> that your version of information needs to read again before making
>>> any
>>> >>>>> changes, because it was recently changed. As the server knows
>>> that, client B
>>> >>>>> has initiated a transaction and not client A, so it will give
>>> priority to
>>> >>>>> client B, and notify A. And yes, this does include some
>>> conflicting
>>> >>>>> situations, when both client A and client B begin transaction one
>>> after
>>> >>>>> another, and try to make changes to same set of data. In that case
>>> the
>>> >>>>> change-request by the later client can be denied, to read the new
>>> data, and
>>> >>>>> try again.
>>> >>>>
>>> >>>> This is already supported by the MVCC system but happens at
>>> commit()
>>> >>>> time. We planned to support pessimistic approach as well but it's
>>> not
>>> >>>> urgent, at least today, as priority.
>>> >>>>>
>>> >>>>> I was thinking on this solution, whether there is a possibility of
>>> >>>>> deadlocks or dog-trying-to-catch-its-tail kind of problems. But am
>>> unclear
>>> >>>>> on this yet.
>>> >>>>> Managing transactions in distributed version of OrientDB, will
>>> also
>>> >>>>> bring some new questions. But again, we are already sitting in a
>>> world,
>>> >>>>> where many of such problems have been thoroughly studied and
>>> solved.
>>> >>>>
>>> >>>> Now distributed TX are not supported, let see in the future.
>>> >>>>
>>> >>>> Lvc@
>>> >>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> Regards
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> On Sunday, July 1, 2012 4:33:31 AM UTC+5, Lvc@ wrote:
>>> >>>>>>
>>> >>>>>> Hi Mich,
>>> >>>>>> the choice to leave everything on the client side was to maximize
>>> >>>>>> concurrency on the server side. Unfortunately this approach has
>>> the
>>> >>>>>> limitations you exposed.
>>> >>>>>>
>>> >>>>>> So today transactions works fine using the embedded/local mode
>>> but
>>> >>>>>> against a remote servers lack of these problems.
>>> >>>>>>
>>> >>>>>> To solve them this is the solution we thought: leave all as is,
>>> but
>>> >>>>>> filter the result set on the client side reading the TX changes.
>>> This would
>>> >>>>>> leave all the benefits of current approach in scalability, but
>>> this means
>>> >>>>>> also that commands like SQL UPDATE and DELETE should be divided
>>> in these
>>> >>>>>> steps:
>>> >>>>>>
>>> >>>>>> client sends the command to the server
>>> >>>>>> the server get the target records to change and send to the
>>> client the
>>> >>>>>> RIDs
>>> >>>>>> the client filter them and sends to the servers the changes
>>> (mostly
>>> >>>>>> none or few)
>>> >>>>>> the server do the really SQL statement against filtered records
>>> >>>>>>
>>> >>>>>> In case you update 1,000 records this means that 1,000 RIDs will
>>> be
>>> >>>>>> sent to the client side. One serialized RID is 10bytes, so 10k
>>> will be
>>> >>>>>> transferred to the client.
>>> >>>>>>
>>> >>>>>> For the SQL Select the overhead is usually minimum because the
>>> target
>>> >>>>>> is already transferred to the client and just filtered on it.
>>> >>>>>>
>>> >>>>>> Lvc@
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> On 30 June 2012 01:55, Mich Geni <[email protected]> wrote:
>>> >>>>>>>
>>> >>>>>>> Hi,
>>> >>>>>>>
>>> >>>>>>> I want to illuminate a problem people have faced and discussed
>>> in
>>> >>>>>>> this forum before. Which is transactions. Most people when first
>>> start to
>>> >>>>>>> use OrientDB think that they can do pretty stuff in a
>>> transaction (means by
>>> >>>>>>> which they think to be done in their transaction). But soon they
>>> find that
>>> >>>>>>> since everything remains in memory on client side until the
>>> transaction is
>>> >>>>>>> committed (especially temporary RIDs stuff) and not on
>>> server-side, so
>>> >>>>>>> immediately they start to break their 'transaction' into more
>>> pieces (in
>>> >>>>>>> OrientDB sense of implementing transactions) in order to make it
>>> work.
>>> >>>>>>>
>>> >>>>>>> But one thinks that what is the need of transactions then?
>>> Orient is
>>> >>>>>>> a Document-Graph DB with ACID Tx. So one expects that it will be
>>> >>>>>>> transactional for graphs. But when you push the transaction
>>> thing on the
>>> >>>>>>> client side, it really becomes a nightmare. Consider an example
>>> below:
>>> >>>>>>>
>>> >>>>>>> (NOTE: I have tried to give a more complete code example.
>>> OrientDB
>>> >>>>>>> version: 1.0.1 (but to date svn trunk 5965 still is relevant to
>>> consider).
>>> >>>>>>> In order to be simple, I have skipped many checks and efficiency
>>> jugglery)
>>> >>>>>>>
>>> >>>>>>> We are taking an example of a financial application which works
>>> in
>>> >>>>>>> today's modern days of social networks and graphs. A user sends
>>> an amount of
>>> >>>>>>> $300 from his account to his friend account. Here is how we will
>>> do it
>>> >>>>>>> OrientDB using Graph API:
>>> >>>>>>>
>>> >>>>>>> Steps:
>>> >>>>>>>
>>> >>>>>>> Create domain classes (vertices and edges)
>>> >>>>>>> Insert initial records
>>> >>>>>>> Write and Run our code to perform the transaction (money
>>> transfer)
>>> >>>>>>> See results
>>> >>>>>>>
>>> >>>>>>> Step 1:
>>> >>>>>>>
>>> >>>>>>> orientdb> Create Class Account Extends V
>>> >>>>>>>
>>> >>>>>>> Class created successfully with id=10
>>> >>>>>>>
>>> >>>>>>> orientdb> Create Class BalanceUpdated Extends E
>>> >>>>>>>
>>> >>>>>>> Class created successfully with id=11
>>> >>>>>>>
>>> >>>>>>> orientdb> Create Class SendAmount Extends E
>>> >>>>>>>
>>> >>>>>>> Class created successfully with id=12
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> Step 2:
>>> >>>>>>>
>>> >>>>>>> orientdb> insert into Account (accountNumber, currentBalance)
>>> values
>>> >>>>>>> ("516544646", "1000")
>>> >>>>>>>
>>> >>>>>>> Inserted record
>>> >>>>>>> 'Account#8:0{accountNumber:516544646,currentBalance:1000} v0'
>>> in 0.005000
>>> >>>>>>> sec(s).
>>> >>>>>>>
>>> >>>>>>> orientdb> insert into Account (accountNumber, currentBalance)
>>> values
>>> >>>>>>> ("5165485491", "100")
>>> >>>>>>>
>>> >>>>>>> Inserted record
>>> >>>>>>> 'Account#8:1{accountNumber:5165485491,currentBalance:100} v0'
>>> in 0.011000
>>> >>>>>>> sec(s).
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> Step 3:
>>> >>>>>>>
>>> >>>>>>>             // Graph Transaction test
>>> >>>>>>>             OGraphDatabase graphDB =
>>> >>>>>>> OGraphDatabasePool.global().acquire("remote:localhost:2424/graphtest1",
>>>
>>> >>>>>>> "admin", "admin");
>>> >>>>>>>             Date currDate = new Date();
>>> >>>>>>>             int amountToTransfer = 300; // in some currency
>>> >>>>>>>             String senderAccountNum = "516544646";
>>> >>>>>>>             String receiverAccountNum = "5165485491";
>>> >>>>>>>
>>> >>>>>>>             try {
>>> >>>>>>> //                graphDB.begin(TXTYPE.OPTIMISTIC); //
>>> >>>>>>> <--------------------
>>> >>>>>>>
>>> >>>>>>>                 List<ODocument> listAcc = graphDB.query(new
>>> >>>>>>> OSQLSynchQuery<Knows>("select from Account where accountNumber =
>>> '" +
>>> >>>>>>> senderAccountNum + "'"));
>>> >>>>>>>
>>> >>>>>>>                 ODocument senderAccount = listAcc.get(0);
>>> >>>>>>>
>>> >>>>>>>                 int senderCurrentBalance =
>>> >>>>>>> Integer.parseInt(senderAccount.field("currentBalance").toString());
>>>
>>> >>>>>>>
>>> >>>>>>>                 if (senderCurrentBalance - amountToTransfer <=
>>> 0) {
>>> >>>>>>>                     //throw BalanceBelowTransferAmount;
>>> >>>>>>>                 }
>>> >>>>>>>
>>> >>>>>>>                 // useful in generating statements
>>> >>>>>>>                 ODocument senderAccountHistory =
>>> >>>>>>> graphDB.createVertex("Account").fields(
>>> >>>>>>>                         "accountNumber", senderAccountNum,
>>> >>>>>>>                         "currentBalance", senderCurrentBalance,
>>> >>>>>>>                         "date", currDate
>>> >>>>>>>                         // and other necessary info
>>> >>>>>>>                         ).save();
>>> >>>>>>>
>>> >>>>>>>                 // Deduct the amount to be transferred from
>>> sender
>>> >>>>>>> account
>>> >>>>>>>                 ODocument senderAccountUpdated =
>>> >>>>>>> senderAccount.fields(
>>> >>>>>>>                         "currentBalance", senderCurrentBalance -
>>> >>>>>>> amountToTransfer,
>>> >>>>>>>                         "date", currDate
>>> >>>>>>>                         // and other necessary info
>>> >>>>>>>                         ).save();
>>> >>>>>>>
>>> >>>>>>>                 // link sender account latest to previous
>>> balance
>>> >>>>>>>                 ODocument senderBalanceHistory =
>>> >>>>>>> graphDB.createEdge(senderAccountUpdated, senderAccountHistory,
>>> >>>>>>> "BalanceUpdated").field("date", currDate).save();
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>                 List<ODocument> listAcc1 = graphDB.query(new
>>> >>>>>>> OSQLSynchQuery<Knows>("select from Account where accountNumber =
>>> '" +
>>> >>>>>>> receiverAccountNum + "'"));
>>> >>>>>>>
>>> >>>>>>>                 ODocument receiverAccount = listAcc1.get(0);
>>> >>>>>>>                 int receiverCurrentBalance =
>>> >>>>>>> Integer.parseInt(receiverAccount.field("currentBalance").toString());
>>>
>>> >>>>>>>
>>> >>>>>>>                 // useful in generating statements
>>> >>>>>>>                 ODocument receiverAccountHistory =
>>> >>>>>>> graphDB.createVertex("Account").fields(
>>> >>>>>>>                         "accountNumber", receiverAccountNum,
>>> >>>>>>>                         "currentBalance",
>>> receiverCurrentBalance,
>>> >>>>>>>                         "date", currDate
>>> >>>>>>>                         // and other necessary info
>>> >>>>>>>                         ).save();
>>> >>>>>>>
>>> >>>>>>>                 // Deduct the amount to be transferred from
>>> sender
>>> >>>>>>> account
>>> >>>>>>>                 ODocument receiverAccountUpdated =
>>> >>>>>>> receiverAccount.fields(
>>> >>>>>>>                         "currentBalance", receiverCurrentBalance
>>> +
>>> >>>>>>> amountToTransfer,
>>> >>>>>>>                         "date", currDate
>>> >>>>>>>                         // and other necessary info
>>> >>>>>>>                         ).save();
>>> >>>>>>>
>>> >>>>>>>                 // link receiver account latest to previous
>>> balance
>>> >>>>>>>                 ODocument receiverBalanceHistory =
>>> >>>>>>> graphDB.createEdge(receiverAccountUpdated,
>>> receiverAccountHistory,
>>> >>>>>>> "BalanceUpdated").field(
>>> >>>>>>>                         "date", currDate).save();
>>> >>>>>>>
>>> >>>>>>>                 // link sender and receiver accounts
>>> >>>>>>>                 ODocument sendAmount =
>>> >>>>>>> graphDB.createEdge(senderAccountHistory,
>>> receiverAccountHistory,
>>> >>>>>>> "SendAmount").fields(
>>> >>>>>>>                         "amount", amountToTransfer,
>>> >>>>>>>                         "date", currDate
>>> >>>>>>>                         ).save();
>>> >>>>>>>
>>> >>>>>>> //                graphDB.commit(); // <--------------------
>>> >>>>>>>
>>> >>>>>>>             } finally {
>>> >>>>>>>                 graphDB.close();
>>> >>>>>>>             }
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> Step 4:
>>> >>>>>>>
>>> >>>>>>> orientdb> select from Account
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+----
>>> ----------------+--------------------
>>> >>>>>>>   #| RID     |accountNumber       |currentBalance      |date
>>> >>>>>>> |out
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+----
>>> ----------------+--------------------
>>> >>>>>>>   0|     #8:0|516544646           |700
>>> |2012-06-30
>>> >>>>>>> 03:00:52 |[1]
>>> >>>>>>>   1|     #8:1|5165485491          |400
>>> |2012-06-30
>>> >>>>>>> 03:00:52 |[1]
>>> >>>>>>>   2|     #8:2|516544646           |1000
>>>  |2012-06-30
>>> >>>>>>> 03:00:52 |[1]                 |[1]
>>> >>>>>>>   3|     #8:3|5165485491          |100
>>> |2012-06-30
>>> >>>>>>> 03:00:52 |null                |[2]
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+----
>>> ----------------+--------------------+--------------------
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> 4 item(s) found. Query executed in 0.206 sec(s).
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> orientdb> select from BalanceUpdated
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+--------------------
>>>
>>> >>>>>>>   #| RID     |out                 |in                  |date
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+--------------------
>>>
>>> >>>>>>>   0|    #13:0|#8:0                |#8:2
>>>  |2012-06-30
>>> >>>>>>> 03:00:52
>>> >>>>>>>   1|    #13:1|#8:1                |#8:3
>>>  |2012-06-30
>>> >>>>>>> 03:00:52
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+--------------------
>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> 2 item(s) found. Query executed in 0.095 sec(s).
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> orientdb> select from SendAmount
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+----
>>> ----------------+--------------------
>>> >>>>>>>   #| RID     |out                 |in                  |amount
>>> >>>>>>> |date
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+----
>>> ----------------+--------------------
>>> >>>>>>>   0|    #14:0|#8:2                |#8:3                |300
>>> >>>>>>> |2012-06-30 03:00:52
>>> >>>>>>>
>>> >>>>>>> ---+---------+--------------------+--------------------+----
>>> ----------------+--------------------
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> 1 item(s) found. Query executed in 0.078 sec(s).
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> orientdb>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> As depicted in Step 3, we are doing a single financial
>>> transaction on
>>> >>>>>>> graph, inside the try/finally block. If we face any runtime
>>> error in the
>>> >>>>>>> middle, our transaction is not done (and needs to be rolled
>>> back). But as
>>> >>>>>>> you can see the transaction begin() and commit() statements are
>>> commented
>>> >>>>>>> out. Because OrientDB's current implementation doesn't allow
>>> such
>>> >>>>>>> transaction. Every thing is client side until committed, and
>>> sent to server.
>>> >>>>>>> And as you can see, we are doing many things in this
>>> transaction, which are
>>> >>>>>>> decided/found on server side. So we are left with doing no
>>> transaction and
>>> >>>>>>> doing each step as non atomic. Not to mention the helper code
>>> required in
>>> >>>>>>> case of errors if happen in the middle, to undo the previous
>>> changes to the
>>> >>>>>>> DB before error. And the most concerning thing is, this will be
>>> done
>>> >>>>>>> thousands of times by thousands of developers to cover these few
>>> loop holes
>>> >>>>>>> in OrientDB. Isn't it more easy to cover the loop holes by
>>> themselves.
>>> >>>>>>>
>>> >>>>>>> Therefore, it will be great to see real transactions (be it
>>> server
>>> >>>>>>> side or in any other way, but correct and non-surprising)
>>> implementation in
>>> >>>>>>> OrientDB. And as OrientDB is undergoing heavy
>>> evolution/development, we can
>>> >>>>>>> expect such problems to go away in near future.
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> Regards
>>> >>>>>>
>>> >>>>>>
>>> >>>>
>>> >>> --
>>> >>>
>>> >>>
>>> >>>
>>> >>
>>> >>
>>> > --
>>> >
>>> >
>>> >
>>>
>>  --
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "OrientDB" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to