Documentation > Frequently Asked Questions
- Does H-Store support fully ACID transactions?
- How are H-Store and VoltDB related?
- What are the major differences between H-Store and VoltDB?
- Can I run my VoltDB application in H-Store?
- How do I fix the UnsatisfiedLinkError failure when running H-Store in Eclipse?
- How do I merge the latest changes back to my personal branch?
- Why does the server crash when I disable the client.blocking option?
- Where are the log files for the server nodes?
- Where can I report problems, bugs, or feature requests?
Does H-Store support fully ACID transactions?
Yes. All of operations within a transaction are atomic acros all the partitions involved in the transaction. When a transaction executes, it has exclusive access to the data at the partitions that it locks, therefore all of its operations execute on a consistent view of the database and are isolated from all other transactions (since no other transactions execute concurrently at those partitions). Finally, with snapshots and command logging, the state of the database is completely recoverable and all changes made by transactions are durable.
How are H-Store and VoltDB related?
Prior to working on H-Store, the database groups at MIT and Brown collaborated together to create a column store system. For this previous research project, C-Store was the original academic prototype, while Vertica was the commercial system based on C-Store’s design. These two systems were completely separate and did not share any code.
Similarly, H-Store was originally conceived as the academic prototype. The original version of H-Store was a single-node proof-of-concept used in the 2007 VLDB paper. In the beginning of 2008, researchers at Brown, MIT, and Yale started working on a full-fledged, general purpose H-Store system. At the same time, Horizontica was launched as an secret internal project at Vertica. Once again, these were separate code bases that were to serve separate purposes.
In the spring of 2008, it was decided to merge together the backend execution engine of H-Store and the front-end transaction coordinator and query planner of Horizontica. After the VLDB demo in the fall of 2008, the H-Store codebase was forked off and became VoltDB.
The enhancements to the original H-Store codebase added by the VoltDB team were merged back into the H-Store repository in the summer of 2010. Over time, various components of VoltDB have been removed and rewritten in H-Store in order to meet research needs.
What are the major 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 a 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 Batch Planner 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…
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.
How do I fix the UnsatisfiedLinkError failure when running H-Store in Eclipse?
This error is occurs when H-Store is unable to find the C++ shared-library for the Execution Engine.
To fix this problem, you must first build the H-Store system from the command-line using ant build. Then to launch an H-Store instance, add the following VM Arguments options to the run configuration of target test case under Run Configurations -> Java Application -> Arguments
The java.library.path option tells the JVM where to find .so file generated by the build command. The Xcheck:jni parameter is an optional argument that adds additional checks to make sure that the Java portion of the code is passing data with the correct types down through the JNI layer; it should not be used at run time because it adds additional overhead.
I forked the H-Store repository in Github. How do I merge the latest changes back to my personal 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
You can now pull down and merge the latest changes from the master:
git fetch upstream git merge upstream/master
Why does the server crash when I disable the client.blocking option?
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.
Where are the log files for the server nodes?
All of the log output generated by the H-Store nodes in the cluster will be automatically sent back to the machine where you invoked the hstore-benchmark target from the command-line. The log files will be automatically split into separate files in directory defined in the site.log_dir configuration parameter. The log4j output levels can be controlled by editing log4j.properties file.
Where can I report problems, bugs, or feature requests?
Please post all questions that you have with the system on the Github Issues page.