# Main Features of TiFlash

+ Asynchronous replication
+ Consistent reading
+ Engine smart selection
+ Calculation Acceleration
------------------------------------------------------------------------------
TiFlash has several core features, such as asynchronous replication, consistency, engine intelligent selection, and computing acceleration.

Asynchronous replication feature: copies in TiFlash are asynchronously replicated with a special role (Raft Learner). This means that when TiFlash nodes go down or network latency is high, the TiKV business can still be ensured to run normally. This replication mechanism also inherits the automatic load balancing and high availability of the TiKV system, without relying on additional replication channels, but directly receiving data transmission from TiKV in a many-to-many manner; as long as the data in TiKV is not lost, the copies in TiFlash can be recovered at any time.

Consistency: TiFlash provides the same snapshot isolation support as TiKV, and guarantees that the read data is up-to-date (ensuring that previously written data can be read). This consistency is achieved by replicating the data progress check. Every time a read request is received, the Region replica in TiFlash will initiate a progress check (a very lightweight RPC request) to the Leader replica, and only respond to the read when the progress is ensured to cover the data after the timestamp of the read request.

Engine intelligence selection: TiDB can automatically select to use TiFlash column store or TiKV row store, and even mix them in the same query to provide the best query performance. This selection mechanism is similar to TiDB selecting different indexes for query service, and CBO judges the read cost according to the statistical information and makes a reasonable selection.

Calculation acceleration: TiFlash's calculation acceleration for TiDB is divided into two parts: the read efficiency improvement of the column store itself and the calculation task sharing for TiDB. The principle of sharing calculation is the same as that of Coprocessor in TiKV: TiDB will push down the calculation that can be shared by the storage layer. Whether it can be pushed down depends on whether TiFlash can support the related operators to be pushed down.