Implementing high performance ConfD application configuration subscribers and data providers

First, it is good to have the basics in place before addressing performance. The quickest way of getting past the ConfD basics threshold is to go through the Evaluation Kick-Start Guide and and then take some time to watch the online training presentations: Training Videos | Tail-f Systems.
Then it’s recommended that you at least go through the $CONFD_DIR/examples.confd/intro examples to get a good basic understanding of ConfD. The $CONFD_DIR/examples.confd/cdb_subscription/iter_c example is highly recommended too.

Below a short summary on how to find information on ConfD to put together your best practices addressing performance for your particular use case. I.e. knowing your ConfD toolbox to make intelligent performance related design decisions:

ConfD User Guide

Configuration data
Focus here is to find a balance on how coarse/fine grained you want to be with reading out configuration changes. I.e. read out all of the configuration, or traverse each individual leaf, or a middle way. The middle way is what most application can benefit from using.
See:
• ConfD UG chapter CDB - The ConfD XML Database —> CDB subscriptions
• conf_lib_cdb man page — cdb_subscribe(), cdb_diff_iterate(), cdb_get_modifications(), cdb_get_modifications_iter(), cdb_get_object(), cdb_get_objects(), and cdb_get_values().
• ConfD UG chapter Running application code inside ConfD. Writing your applications in Erlang, or at least the most ConfD performance intensive parts, will likely be beneficial to performance in comparison to C + libconfd based implementations.

Operational data
Focus here is to register callbacks to handle large lists/tables if you implement such, which many ConfD users do. Registering the get_elem() callback only is not a good approach if you implement large lists/tables.
See:
• ConfD UG chapters Operational Data —> Data Callbacks —> get/find_next_object, and Operational Data —> Caching Operational Data
• confd_lib_dp man page — confd_register_data_cb(), get/find_next_object(), and confd_data_reply_next_object_arrays()
• ConfD UG chapter Running application code inside ConfD. Writing your applications in Erlang, or at least the most ConfD performance intensive parts, will likely be beneficial to performance in comparison to C + libconfd based implementations.

In many, not the majority of, use-cases the application need to store operational data in CDB. See:
• ConfD UG chapter Operational data in CDB.

For certain applications it makes sense to implement an external database, e.g. PostgreSQL for the operational data store part (keeping candidate and running configuration datastores in CDB)
• See chapter The external database API. Also confd_lib_dp cdb_set_object(), and cdb_set_values()

ConfD Example Set

After taking a look at the basic examples in the $CONFD_DIR/examples.confd/intro folder, here are a few good ones when addressing configuration / data provider application performance.

Configuration data

$CONFD_DIR/cdb_subscription/iter_c
$CONFD_DIR/erlang/econfd/examples/test

Operational data

$CONFD_DIR/examples.confd/cdb_oper/ifstatus
$CONFD_DIR/examples.confd/cdb_oper/loadhist
$CONFD_DIR/examples.confd/erlang/econfd/examples/procs/

ConfD User Community Forum

An additional good source of information where you can ask the ConfD community for recommendation about best practices that relate your particular user-case. Here are a few examples:

Configuration data

Operational data