Permalink
Switch branches/tags
2ptxn 4petah-command-log 13953 E3-integration ENG-6146-Constraint-Violation-Name ENG-6146-Constraint-Violation ENG-6501 ENG-6586-indexed-agg ENG-7557-noprojectfileexamples ENG-7958-benchmark ENG-8448-rejoin-rack-aware ENG-8506 ENG-8555-MissingCmdsTxnid2 ENG-8840-ethan-all ENG-8840-ethan-catchup ENG-8957-xdcr-selfcheck ENG-9288 ENG-9295-a-trivial-change-to-master ENG-9295-memcheck-fix ENG-9309-debug2 ENG-9582-geo-osm-import-example-redo ENG-10012 ENG-10014-2nd-MA-patched-subquery-simplify ENG-10014-2nd-subquery-simplify-merge ENG-10014-3rd-subquery-simplify-merge ENG-10014-subquery-simplify-merge ENG-10044-tweakclientstats ENG-10153 ENG-10259-licensecheck-add-go-support ENG-10294-hsql-statement-cleanup ENG-10350-november ENG-10430-sqlcmd-echo ENG-10439 ENG-10452-slf4j ENG-10505-pertxn-consistency ENG-10518-mismatch ENG-10539-RuseVoltMessageBuffers ENG-10623-param-diagnostics-forward-merge ENG-10623-pg-build ENG-10625-1 ENG-10626-normal-reader-setup ENG-10626-notest ENG-10634-default-reads-fast ENG-10701 ENG-10740-planner-perf ENG-10740-plannode-perf ENG-10775-scov-full-join ENG-10854-remove-deprecated-client-methods ENG-10859-merged-partitioned-set-op ENG-10859-partitioned-set-op ENG-10859-rebased-partitioned-set-op ENG-10859-renaming ENG-10859-squashed-setop-push-down ENG-10878-cli ENG-10878-gw ENG-10878-python ENG-10944-np-txn-phase-1 ENG-10944-np-txn ENG-11017-diagnose-notest ENG-11019clone ENG-11037 ENG-11094-1 ENG-11094-2 ENG-11096-hsql-backend-not-distinct-bug-fix ENG-11098-csv-columns-omitted ENG-11143 ENG-11155-voltdb-on-k8s ENG-11250 ENG-11254 ENG-11287 ENG-11340 ENG-11349-scov-postgres-def ENG-11433 ENG-11483-test-fix ENG-11483 ENG-11484 ENG-11594-rejoin-npe ENG-11647 ENG-11662-nshi ENG-11682-protrial ENG-11690 ENG-11692 ENG-11877-rootuser ENG-11930 ENG-11942-add-logic-functions ENG-12034-debug ENG-12034-multiple-node-kill-wedges-importer ENG-12046-ntprocs ENG-12067 ENG-12148 ENG-12159-set-timezone-tostring ENG-12231-prepaid-call-example ENG-12334 ENG-12409_always_wait_for_in_progress ENG-12437-python3 ENG-12443-remove-partition-procedure ENG-12455-checkpoint-gaptracker-rework ENG-12455-kafkaimporter-debugging ENG-12463-snapshot-diff ENG-12478-improve-eecheck ENG-12572-resources ENG-12666-quickfix ENG-12672 ENG-12732 ENG-12769-queue-depth-with-log ENG-12821-bulkLoad ENG-12823-empty-block-master ENG-12827-v9-enabled ENG-12829.Coalesce.insert.undo.actions ENG-12848-ExampleConflictResolver ENG-12865-leavenoholes ENG-12872-reviewchanges ENG-12930 ENG-12972-2p-txn-vmc ENG-13011-revert-multistatement-sp ENG-13114 ENG-13126-new ENG-13126-ref ENG-13217-cmetrics ENG-13382-TwoTouchRestore ENG-13411_ssl_enabled_perf_notest ENG-13425-voltkvqa-notest ENG-13461 ENG-13462 ENG-13482 ENG-13495-debug ENG-13519-backportv7.9 ENG-13542 ENG-13545-cleanup-old-cli ENG-13579-SupportMoreLocalServerThreadTests ENG-13610-LTTAggSupport-notest ENG-13610-LTTAggSupport ENG-13684_txnid2_calling_wrong_udf ENG-13698-squashed ENG-13741-new ENG-13741 ENG-13760-GapDetection ENG-13811-gram-index ENG-13854-remove-debug-log ENG-13867 ENG-13878-CLEAN ENG-13879-LTTWindowFcns-notest ENG-13880-ShutdownDRConsumerPartition ENG-13955 ENG-14129 ENG-14145-join ENG-14162-DeferDecompressToReduceCatalogMsgSize79 ENG-14181-Query-Optimization-AbstractExpression-simplifier-for-integers ENG-14188-test ENG-14188 ENG-14258 ENG-14293 ENG-14314 ENG-14316-fix ENG-14322-Backport ENG-14342-apprunner-enable-rejoin-kills ENG-14347-ExcludeSchemaFromUsos ENG-14376-drainSP ENG-14376 ENG-14401 ENG-14436-AggRefactor ENG-14447-remove-action-blocker ENG-14464 ENG-14470_correct_ExportDataSource.m_runEveryWhere ENG-14496 ENG-14511-st-increase-catalog-update-fr-test ENG-14511UacLogging ENG-14531_reduce_intermidiary_objects ENG-14545 ENG-14550-nibble-hashmismatch82 ENG-14559-spi-deserialization ENG-14573-HardenHashMismatchCheck_82 ENG-14609-DontRestartNonRestartable ENG-14609RepairOnce ENG-14609 ENG-14640-master ENG-14684 ENG-14742-limit-export-threads ENG-14744-hash-mismatch-after-repair ENG-14768 ENG-14769 ENG-14770 ENG-14805-licensing ENG-14811-exportgaptest ENG-14874 ENG-14884-test-tools-grep ENG-14888-fix-genqa-error-detection-1 ENG-14888-fix-genqa-error-detection ENG-14901-client-backpressure ENG-14903_k8s_configmaps ENG-14908 ENG-14941-check-for-gaps-txnid2 ENG-14944 ENG-15004-investigation-notest ENG-15004-new-kafka-libs ENG-15015.calcite-DQL-path ENG_13600_increase_debug_logging_to_info EthanUDF HSQL_Statement_code_purge HSQL_Statement_rework IW-IndexWithBtree IW-ScratchPad IW-diwakar-LinAlg InnovWeekFixWriteHeavyCommandLog InnovationWeek-nibbleExport InnovationWeek-simple-export Inov-java11 OP-347-test OP-362-AdvancePBDSegmentIdsWhenEmpty Refactory-EE-Topend-and-exceptions SPI-migration-preview SQLPresentation-notest TPCC_strings UDF-benchmark-notest VMC-358 VoltTableArg agg-udf-notest apprunner-fix-corrupt-export-config back-port-row-number backout_ENG-11578_pause_view_ss_restore because-streams-are-not-tables bshaw-innov-explicit-hugepages calcite-drop-table calcite-prototype-2-aggr calcite conflict-resolver cwolff-innovation-week-2016-march-notest dege do-exceptions-checks-in-jni-topend e-x-p eecheck_build_patch examples-from-github-hugg export-enhancements fast-hash-lib feature-elastic_remove fix-genqa-test-export-drain-error fix-local-cluster forward5.9.x hugg-2pt-ux hugg-debuggable-procs hugg-nibble-wip hugg-splitci hugg-wip-uacbench2 import-exp import-tune innov-avro-snapshot innovation-snapshot-notest ipc_amble_squash iw-june-2017-async-cl-support iw-tupleblock-freelist johnc-innov-flaky-tests johnc-innov-junit-flaky1 kafka-loop-around kafka10-jmc kre-investigative long_running_reads lrr_prototype mac_memcheck_eecheck_test_patch master moreDebugLogging natec-innov-netty_for_networking negative_delta_index_prototype nibble-deletes notest-better-branch-removal notest-just-netty-voltpatches notest-refreshed-10551-long-running-reads notest_pmartel_planner_swaptables nov25patch58 nov28workaround nptxn-bench-base-fix partial-ava patch-kafkatester pm_planner_cleanup pm_planner_refactor pm_test_cleanup pmartel-lobManager pmartel-planner-messages pmartel-valgrind-voltdbipc pmartel_ClientResponseImpl_simpler pmartel_ElasticScannerMemoryPooling pmartel_iw_catalogdelegate pmartel_iw_simpler_serializing pmartel_junit_patch pmiw_VoltJUnitFormatter pr160123_perf_volt16s_notest pr170326_check_import_export_notest pr180702_spi_migration pr180820_kubernetes_wip pr180829_k8s_wip pr180924_test_jenkins pr181204_OP-362_k8s_controller_4_openent_cdp_glusterfs_notest refactored-10474-Index4Windows release-4.0.1.x release-4.2.x release-4.4.x release-4.6.x release-4.6.11.x release-4.9.x release-5.0.x release-5.1.x release-5.2.x release-5.3.x release-5.4.x release-5.5.x release-5.7.x release-5.8.x release-5.9.x release-6.0.x release-6.1.x release-6.2.x release-6.3.x release-6.4.x release-6.5.x release-6.6.x release-6.7.x release-6.8.x release-6.9.x release-7.0.x release-7.1.x release-7.2.x release-7.3.x release-7.4.x release-7.5.x release-7.6.x release-7.7.x release-7.8.x release-7.9.x release-8.0.x release-8.1.x release-8.2.x release-8.3.x repl_delay_consumer_stats revert-3929-ENG-11036 review-lrr revised-10474-Index4Windows reworked-lrr rharding_innovation_week_mpi rshen-7.8-serializeMore rshen-actionblocker-errmsg rsiw-netty ruth-iw-strace-notest snapshot_mailbox_isolate ssl-test ssltest-no-separate-CE-threads stats-saved-to-voltdb streamedtable-with-query test_kakfa_ack_settings traffic-data-vizceral ttl-benchmark-perf-improvements txntrace-xin uactrace-xin universal-replicated-subq-rebased universal-replicated-subqueries voltdb-server-jar-maven volttable-sql-support warningscleanup2 younggensize
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
95 lines (58 sloc) 6.67 KB

Examples Guide

VoltDB provides a number of examples to help people learn what is possible with VoltDB as well as how to use certain features. Some of these examples show specific patterns and individual features, while others are based on real-world applications. Many examples are simplified in the interest of making them better learning tools.

All of the examples in the download kit are written in Java. There are some examples that have JDBC client code in addition to VoltDB native client code, notably voter and voltkv. For examples in additional languages, download a client kit for a specific language. There is a list of client kits with examples on our Developers page.

These examples do not cover the complete set of VoltDB features or use cases; they are just a sample of what is possible with VoltDB. We do, however, expect to add additional examples and refinements over time. If you have feedback or suggestions related to examples, or any of the HOWTOs, send email to askanengineer@voltdb.com, we welcome your input.

HOWTOs

The HOWTOs directory provides short Developer and Administrator tutorials on how to use various VoltDB features, configurations, and techniques. This includes how to run the example projects on a cluster, how to run VoltDB in Docker or in the Cloud, and how to run unit tests on stored procedures. For more information, check out the README.md.

Example Projects

The following projects are included in the examples directory:

adperformance

This application simulates a high velocity stream of impression, click-through, and conversions events that are enriched and ingested by VoltDB. Several materialized views maintain real-time aggregations on this data to provide a minutely summary for each advertiser as well as drill-down reports grouped by campaign to show detail-level metrics, costs and rates with real-time accuracy.

bank-fraud

Ingest generated consumer purchase transaction data and use summary data from materialized views to evaluate against rules to detect possible fraud. The web dashboard shows recent alerts and their related transactions.

bank-offers

Ingest simulated consumer purchase transaction data and find the best matching offer to present to the consumer at the point-of-sale.

Matching offers are found using a query that joins a summary view of the account activity with this vendor (merchant) against the available offers from that vendor. The best match is determined by the priority for the offers that was set by the vendor.

callcenter

The Callcenter VoltDB application processes begin and end call events from a call center. Pair/join events in VoltDB create a definitive record of completed calls. Note that this app uses unrealistic call data -- the average call time is 5s by default -- to make the simulation interesting in a two-minute example run.

Use VoltDB's strong consistency and stored procedure logic to compute a running standard deviation on call length by agent. This is not a trivial thing to compute without strong consistency. Thankfully VoltDB provides strong consistency, making solving this problem much easier. The provided HTML dashboard shows a top-N list of agents by standard deviation.

contentionmark

ContentionMark is a small VoltDB application that measures VoltDB throughput under extreme contention. By default, ContentionMark creates one row, then updates it as fast as VoltDB will let it, one transaction per update.

It's also the smallest example we have, for what it's worth!

geospatial

This example demonstrates geospatial functionality that was added to VoltDB in version 6.0. The problem space for this demo is serving ads to many mobile device users based on their location, in real time.

json-sessions

This example shows how to use flexible schema and JSON within a VoltDB application.

metrocard

This application performs high velocity transaction processing for metro cards. These transactions include card swipes and new card generation.

nbbo

NBBO is the National Best Bid and Offer, defined as the lowest available ask price and highest available bid price across the participating markets for a given security. Brokers should route trade orders to the market with the best price, and by law must guarantee customers the best available price.

The example includes a web dashboard that shows the real-time NBBO for a security and the latest available prices from each exchange.

positionkeeper

This application simulates a simple position keeper application that maintains the positions of portfolios that are updated frequently as trades and price changes occur.

uniquedevices

This example counts unique device ids as they stream into VoltDB. It demonstrates VoltDB's stream processing power and the use of external libraries in Java stored procedures. It is loosely based on a real problem previously solved using the Lambda architecture.

voltkv

This directory contains the sources for a "Key-Value" implementation in VoltDB along with a simple benchmark.

VoltKV includes synchronous, asynchronous and JDBC versions of the client code.

voter

This example is a simulation of a telephone based voting process where callers are allowed a limited number of votes.

Voter includes synchronous, asynchronous and JDBC versions of the client code.

windowing

This example shows an application that takes in time-series data, runs analytic queries over several time-windows, and deletes older data as it either ages out or passes a rowcount threshold.

windowing-with-ddl

A modified version of the windowing example that demonstrates the V5 feature that lets users define how to age out old tuples using a special row-count constraint on the table definition. This example has no Java stored procedures.

Getting Started

Each example contains a README.md file with full instructions for running, building, etc.

The examples all contain a bash script file named "run.sh" that contains functions for doing most things. This is generally only strictly needed for running the client apps, but can be a useful reference for other operations.

The following steps will run an example:

  1. Make sure "bin" inside the VoltDB kit is in your path.
  2. Type "voltdb create --force" to start an empty, single-node VoltDB server.
  3. Open a second terminal window in the same working directory.
  4. Type "sqlcmd < ddl.sql" to load the schema and the jarfile of procedures into VoltDB.
  5. Type "./run.sh client" to run the client code.

Typing "./run.sh help" will also show the available targets for each example.

When finished, hit Ctrl-C in the server terminal window to stop the VoltDB database.