Documentation > Frequently Asked Questions


  1. How are H-Store and VoltDB related?
  2. What are the differences between H-Store and VoltDB?
  3. Can I run my VoltDB application in H-Store?
  4. How do I merge the latest changes back to my branch?
  5. Why does the server crash when I turn off client.blocking?

  1. How are H-Store and VoltDB related?

    To be written: History of H-Store, Horizontica, and VoltDB
    In short, H-Store is the academic version of VoltDB.

  2. What are the differences between H-Store and VoltDB?

    VoltDB is being developed for production environments, and thus it is focused on high-performance throughput for single-partition transactions and provides robust handling of failures that are obviously needed for a main memory system. H-Store does not have VoltDB’s tools for managing and maintaining clusters. But because H-Store is research database (thus does not provide many of the safety guarantees that VoltDB does), this allows H-Store to support additional optimizations, such as speculative execution and arbitrary multi-partition transactions.

    For example, in VoltDB every transaction is either single-partition or all-partition. That is, any transaction that needs to touch multiple partitions will cause the VoltDB’s transaction coordinator to lock all partitions in the cluster, even if the transaction only needs to touch data at two partitions. When building the latest version of H-Store, we removed VoltDB’s internal transaction coordination subsystem and replaced it with a more general framework that supports arbitrary transactions. For each query batch submitted by a transaction, the heavily optimized H-Store BatchPlanner determines what partitions each query needs to access and only dispatches requests to those partitions.

    It is likely VoltDB will support these features in the future, but the students working on H-Store hope to have graduated before then…

  3. Can I run my VoltDB application in H-Store?

    H-Store uses VoltDB’s VoltProcedure API, so any stored procedures written for VoltDB should still work in H-Store. Although H-Store uses a modified version of VoltDB’s client wire protocol, the front-end client API has not changed. Thus, any Java-based application code should also be able to link with the H-Store API. You cannot reuse a VoltDB project jar, however, as the H-Store internal catalog structure is different.

  4. I forked the H-Store repository in Github. How do I merge the latest changes back to my branch?

    See Github’s documentation on forking. You first need to add a new remote link back to the original H-Store repository:

    git remote add upstream git://github.com/apavlo/h-store.git
    git fetch upstream

    You can now pull down and merge the latest changes from the master:

    git fetch upstream
    git merge upstream/master

  5. Why does the server crash when I turn off ${client.blocking}?

    Turning off blocking means that it’s going to keep submitting as many transactions as it can to the server without waiting for a response. The server tries to do some throttling to prevent itself from getting overloaded, but if there are too many incoming transaction requests the HStoreSite will eventually run out of memory and crash.

    Instead of turning off blocking, you can turn set ${client.blocking_concurrent} to a value other than one. That will let each client thread have more than one outstanding transaction request at a time.