Efficient Transactions for Geo-Distributed Datastores 
      In traditional transaction processing systems, transaction processing
      occurs separately from the commit protocol.  The transaction performs 
      read and write operations and completes any computation that it may need
      to do before initializing a commit protcol.  In the case where the read
      and write operations are dependent and cannot be parallelized
      (i.e., the value of a key determines the subsequent key access), significant
      latency would be incurred if the transaction coordinator was in a different 
      location from the data, as many cross-datacenter round trips would be required
      to perform the read and write requests.  For the same reason, the commit protocol
      requires more latency if partipating servers are located remotely from the
      transaction coordinator.  Consequently, CrossStitch's design enables
      a transaction designer to group operations, which are located in the same
      datacenter, together.  Moreover, we present CrossStitch's pipelined atomic
      commit protocol, which executes currently with the transaction.
      
      
      
      
 Using Code Shipping and Group Operations Together 
      In the CrossStitch framework, transactions are structured as a series of
      
 states , where each state is characterized by a key request and
      some computation.  A transaction shifts state when a new key request is made.
      States can be grouped together such that adjacent states are found in the same
      datacenter.  This allows us to minimize the latency incurred from cross-datacenter
      round trips.
      
      
 Pipeline Atomic Commit Protocol 
      
      CrossStitch introduces its pipelined atomic commit protocol (PLC) that executes
      concurrently with the transaction's execution.  In PLC, 
 vote request,
      vote commit,  and 
 vote abort  messages are sent between participating 
      servers to determine the commit status of the transaction.  The role of coordinator shifts down the
      transaction chain as each participating server enters the precommit, analogous to the
      vote commit, stage.  While this is happening, transaction execution progresses.
      Consequently, transaction commit time is masked by transaction execution time, and
      the overall completion time of a transaction is lower than protocols that separate
      the commit protocol and transaction execution.
      
      
 Replication Message Weaving 
      
      We can extend CrossStitch's PLC for replication.  The transaction is forwarded
      to the key's primary and secondary server (on a write request).  Both 
      servers execute the key request and the transaction, and the secondary server
      sends a message to the next hop's primary server.  Consequently, a participating
      server does not enter the precommit (vote commit) stage until it has received
      all of its expected messages (acknowledgement, precommit message from previous server,
      and replica's message).  By weaving replication messages, we reduce the overall
      completion time of a transaction by hiding replication latency.