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