Internal services
The Decimal network has a number of services — Workers, which collect data coming directly to the blockchain; Data, which include blocks and transactions of different types: sending, buying, selling, creating coins, and so on.
Users of the browser (Explorer) make requests to search for all kinds of information about the blockchain. All of them pass through a special balancer, which evenly distributes the load and directs the corresponding read requests from slave-stores.
This is how buffering of data and the access channel for reading from the blockchain with high bandwidth is carried out.
Data buffering
Buffering is a way of organizing data exchange in computers and other computing devices, which implies the use of a buffer for temporary data storage.
When entering data, some devices or processes write data to the buffer, while others read from it, when outputting — vice versa. The process that has written to the buffer can immediately continue working without waiting for the data to be processed by another process to which it is intended. In turn, the process that has processed some portion of data can immediately read the next portion from the buffer.
Thus, buffering allows processes that perform input, output, and data processing to run in parallel, without waiting for another process to do its part. Therefore, data buffering is widely used in multitasking operating systems.
Why are they needed?
Believing that users will be interested in a very large amount of information about the status and processes in the Decimal network, namely transaction details, blocks, validators and their parameters, issued coins, and so on, DecimalChain took care of the availability of all these data and ensured their correct and fast display using internal services.
With the passage of time and the increase of the blockchain, it will become more and more difficult to process requests. Significant time delays are possible when fetching data directly from blockchain replicas.
DecimalChain has organized storage in a database capable of satisfying a huge number of requests and guaranteed to provide the information users need.
The process is organized as follows. State changes in the blockchain generate "events", which are monitored by "workers". They disassemble all incoming information from blocks and transactions into its component parts and transmit it to the "indexer", in which the data is sorted and indexed. After that, the ordered information is written to the database (PostgreSQL), the "master database" (Master) and duplicated on the "slave repositories" (Slave) to guarantee safety. All requests from the explorer are sent to the "slave databases" through the "Load Balancer", which organizes uniform load distribution through the program interface (API).
This scheme is horizontally scalable, that is, if the load increases, then you can add slave bases. At the same time, masternodes, where replicas of the blockchain are directly stored, are not loaded, since they are architecturally separated from user requests and external services.
Thanks to indexing, databases are able to provide information about any events and states in the blockchain with minimal delays, regardless of the size of the database itself.