Fork me on GitHub
1 Introduction
 1.1 Why HyperDex?
 1.2 About this Book
 1.3 Help and Support
  1.3.1 Online and Free Resources
  1.3.2 Commercial Support
2 Installing HyperDex
 2.1 Quick Installation with Docker
 2.2 Installing on CentOS/RedHat Using Binary Packages
 2.3 Installing on Debian Using Binary Packages
 2.4 Installing on Ubuntu Using Binary Packages
  2.4.1 Ubuntu 12.04 Precise Pangolin
  2.4.2 Ubuntu 14.04 Trusty Tahr
 2.5 Installing on Fedora Using Binary Packages
 2.6 Installing on Linux Using Universal Binaries
 2.7 Installing on OS X Using Homebrew
 2.8 Installing From Source
  2.8.1 Troubleshooting
 2.9 Verifying Installation
 2.10 Upgrading to 1.6
 2.11 Upgrading to 1.5
 2.12 Upgrading to 1.4
 2.13 Upgrading to 1.3
 2.14 Upgrading to 1.2
I  For Developers
3 Quick Start
 3.1 High-Level Overview
 3.2 Starting the Coordinator
 3.3 Starting HyperDex Daemons
 3.4 Creating a new Space
 3.5 Interacting with the “phonebook” Space
 3.6 Cleaning Up
4 Data Types
 4.1 Setup
 4.2 Strings
 4.3 Integers
 4.4 Floats
 4.5 Lists
 4.6 Sets
 4.7 Maps
 4.8 Timestamps
  4.8.1 Timestamp Intervals
5 Asynchronous Operations
 5.1 Setup
 5.2 Asynchronous Operations
 5.3 Potential Pitfalls
 5.4 A Common Window Pattern
6 Atomic Operations
 6.1 Setup
 6.2 Atomic Operations
 6.3 A Comprehensive Walk
  6.3.1 Atomic Operations on Documents
7 Document Storage
 7.1 Setup
 7.2 Working with Documents
 7.3 Indexing Documents
8 Authorization
 8.1 Setup
 8.2 Using Macaroons
 8.3 Advanced Caveats
 8.4 Efficiency Considerations
9 Transactions
 9.1 Setup
 9.2 Using Transactions
 9.3 Rich API
 9.4 Summary
II  For Administrators
10 Backup and Recovery
 10.1 Consistent versus Inconsistent Backups
 10.2 Simple Backup Strategies
 10.3 Backup Efficiency
 10.4 Advanced Backup Techniques
 10.5 Incremental Backups with Rsync
11 Fault Tolerance
 11.1 Coordinator
 11.2 HyperDex Daemons
 11.3 Fault Tolerance Thresholds
 11.4 Shutting Down and Restoring a Cluster
12 Tuning HyperDex
 12.1 Filesystem
  12.1.1 Choosing the Right Filesystem
  12.1.2 Improving Read Performance by Disabling Access Time Updates
  12.1.3 Improving ext3/4 Write Performance with data=writeback
  12.1.4 Changing the Linux Disk Scheduler
  12.1.5 Linux VM Tuning
 12.2 Improving Stability by Increasing Open File Limits
 12.3 Deploying on EC2 and Other Xen Environments
III  API Reference
13 C Client API
 13.1 Building the HyperDex C Binding
 13.2 Compiling and Linking Your Application
 13.3 Hello World
 13.4 Asynchronous Patterns
 13.5 Creating a Client
 13.6 Data Structures
  13.6.1 enum hyperdatatype
  13.6.2 Bytestring Format
  13.6.3 Serialization API
  13.6.4 Deserialization API
  13.6.5 Memory Management Utilties
 13.7 Attributes
 13.8 Map Attributes
 13.9 Predicates
 13.10 Error Handling
 13.11 Operations
  13.11.1 get
  13.11.2 get_partial
  13.11.3 put
  13.11.4 cond_put
  13.11.5 group_put
  13.11.6 put_if_not_exist
  13.11.7 del
  13.11.8 cond_del
  13.11.9 group_del
  13.11.10 atomic_add
  13.11.11 cond_atomic_add
  13.11.12 group_atomic_add
  13.11.13 atomic_sub
  13.11.14 cond_atomic_sub
  13.11.15 group_atomic_sub
  13.11.16 atomic_mul
  13.11.17 cond_atomic_mul
  13.11.18 group_atomic_mul
  13.11.19 atomic_div
  13.11.20 cond_atomic_div
  13.11.21 group_atomic_div
  13.11.22 atomic_mod
  13.11.23 cond_atomic_mod
  13.11.24 group_atomic_mod
  13.11.25 atomic_and
  13.11.26 cond_atomic_and
  13.11.27 group_atomic_and
  13.11.28 atomic_or
  13.11.29 cond_atomic_or
  13.11.30 group_atomic_or
  13.11.31 atomic_xor
  13.11.32 cond_atomic_xor
  13.11.33 group_atomic_xor
  13.11.34 atomic_min
  13.11.35 cond_atomic_min
  13.11.36 group_atomic_min
  13.11.37 atomic_max
  13.11.38 cond_atomic_max
  13.11.39 group_atomic_max
  13.11.40 string_prepend
  13.11.41 cond_string_prepend
  13.11.42 group_string_prepend
  13.11.43 string_append
  13.11.44 cond_string_append
  13.11.45 group_string_append
  13.11.46 list_lpush
  13.11.47 cond_list_lpush
  13.11.48 group_list_lpush
  13.11.49 list_rpush
  13.11.50 cond_list_rpush
  13.11.51 group_list_rpush
  13.11.52 set_add
  13.11.53 cond_set_add
  13.11.54 group_set_add
  13.11.55 set_remove
  13.11.56 cond_set_remove
  13.11.57 group_set_remove
  13.11.58 set_intersect
  13.11.59 cond_set_intersect
  13.11.60 group_set_intersect
  13.11.61 set_union
  13.11.62 cond_set_union
  13.11.63 group_set_union
  13.11.64 document_rename
  13.11.65 cond_document_rename
  13.11.66 group_document_rename
  13.11.67 document_unset
  13.11.68 cond_document_unset
  13.11.69 group_document_unset
  13.11.70 map_add
  13.11.71 cond_map_add
  13.11.72 group_map_add
  13.11.73 map_remove
  13.11.74 cond_map_remove
  13.11.75 group_map_remove
  13.11.76 map_atomic_add
  13.11.77 cond_map_atomic_add
  13.11.78 group_map_atomic_add
  13.11.79 map_atomic_sub
  13.11.80 cond_map_atomic_sub
  13.11.81 group_map_atomic_sub
  13.11.82 map_atomic_mul
  13.11.83 cond_map_atomic_mul
  13.11.84 group_map_atomic_mul
  13.11.85 map_atomic_div
  13.11.86 cond_map_atomic_div
  13.11.87 group_map_atomic_div
  13.11.88 map_atomic_mod
  13.11.89 cond_map_atomic_mod
  13.11.90 group_map_atomic_mod
  13.11.91 map_atomic_and
  13.11.92 cond_map_atomic_and
  13.11.93 group_map_atomic_and
  13.11.94 map_atomic_or
  13.11.95 cond_map_atomic_or
  13.11.96 group_map_atomic_or
  13.11.97 map_atomic_xor
  13.11.98 cond_map_atomic_xor
  13.11.99 group_map_atomic_xor
  13.11.100 map_string_prepend
  13.11.101 cond_map_string_prepend
  13.11.102 group_map_string_prepend
  13.11.103 map_string_append
  13.11.104 cond_map_string_append
  13.11.105 group_map_string_append
  13.11.106 map_atomic_min
  13.11.107 cond_map_atomic_min
  13.11.108 group_map_atomic_min
  13.11.109 map_atomic_max
  13.11.110 cond_map_atomic_max
  13.11.111 group_map_atomic_max
  13.11.112 search
  13.11.113 sorted_search
  13.11.114 count
 13.12 Working with Signals
 13.13 Working with Threads
14 C Admin API
 14.1 Operations
  14.1.1 read_only
  14.1.2 wait_until_stable
  14.1.3 fault_tolerance
  14.1.4 validate_space
  14.1.5 add_space
  14.1.6 rm_space
  14.1.7 mv_space
  14.1.8 list_spaces
  14.1.9 list_indices
  14.1.10 list_subspaces
  14.1.11 add_index
  14.1.12 rm_index
  14.1.13 server_register
  14.1.14 server_online
  14.1.15 server_offline
  14.1.16 server_forget
  14.1.17 server_kill
  14.1.18 backup
  14.1.19 enable_perf_counters
  14.1.20 disable_perf_counters
15 Go Client API
  15.0.21 Using Go Within Your Application
  15.0.22 Hello World
  15.0.23 Data Structures
  15.0.24 Attributes
  15.0.25 Map Attributes
  15.0.26 Predicates
  15.0.27 Error Handling
  15.0.28 Operations
16 Java API
 16.1 Client Library
  16.1.1 Building the HyperDex Java Binding
  16.1.2 Using Java Within Your Application
  16.1.3 Hello World
  16.1.4 Asynchronous Operations
  16.1.5 Data Structures
  16.1.6 Attributes
  16.1.7 Map Attributes
  16.1.8 Predicates
  16.1.9 Error Handling
  16.1.10 Operations
  16.1.11 Working with Signals
  16.1.12 Working with Threads
17 Node API
 17.1 Client Library
  17.1.1 Building the HyperDex Node.js Binding
  17.1.2 Using Node.js Within Your Application
  17.1.3 Hello World
  17.1.4 Asynchronous Operations
  17.1.5 Data Structures
  17.1.6 Attributes
  17.1.7 Operations
  17.1.8 Working with Signals
  17.1.9 Working with Events
18 Python Client API
  18.0.10 Building the HyperDex Python Binding
  18.0.11 Using Python Within Your Application
  18.0.12 Hello World
  18.0.13 Asynchronous Operations
  18.0.14 Data Structures
  18.0.15 Attributes
  18.0.16 Map Attributes
  18.0.17 Predicates
  18.0.18 Error Handling
  18.0.19 Operations
  18.0.20 Working with Signals
  18.0.21 Working with Threads
19 Ruby API
 19.1 Client Library
  19.1.1 Building the HyperDex Ruby Binding
  19.1.2 Using Ruby Within Your Application
  19.1.3 Hello World
  19.1.4 Asynchronous Operations
  19.1.5 Data Structures
  19.1.6 Attributes
  19.1.7 Map Attributes
  19.1.8 Predicates
  19.1.9 Error Handling
  19.1.10 Operations
  19.1.11 Working with Signals
  19.1.12 Working with Threads